C новичка: разбить строку - PullRequest
       1

C новичка: разбить строку

1 голос
/ 05 декабря 2011

У меня есть следующая строка: "http://www.google.ie/". Я хочу создать строку "www.google.ie"

Как мне сделать это в C? Вот что я пробовал до сих пор:

char* url="http://www.google.ie/";
char* url_stripped=NULL;
char* out=strtok(url,"http://");
while(out){
    out=strtok(0,".");
    url_stripped=out;
    break;
}
printf("%s\n",url_stripped);

Но это не работает. Я также боюсь, что если у меня будет URL, содержащий «h», «t», «t» или «p», то все будет испорчено.

Мне также нужно иметь возможность отключить "https://" с самого начала.

Ответы [ 7 ]

3 голосов
/ 05 декабря 2011

C библиотека дает вам много функций для работы! Итак, предложение для начала, это посмотреть здесь: http://www.cplusplus.com/reference/clibrary/cstring/, чтобы вы могли выбрать функцию, которая соответствует вашим потребностям .. вместо того, чтобы заново изобретать алгоритм, я предлагаю поработать с вами уже! хорошая работа!

1 голос
/ 05 декабря 2011
char* url="http://www.google.ie/";
char* url_stripped;
strcpy(url_stripped,url+7);
printf("%s\n",url_stripped);
1 голос
/ 05 декабря 2011

Позднее возможное решение:

const char* PROTOCOLS[]  = { "http://", "https://", 0 };
char* url_stripped = 0;
const char* protocol;
char* url = *(a_argv + 1);

for (size_t i = 0; 0 != PROTOCOLS[i]; i++)
{
    protocol = strstr(url, PROTOCOLS[i]);
    if (protocol == url) /* Ensure starts with and not elsewhere. */
    {
        const char* first_fwd_slash;
        protocol += strlen(PROTOCOLS[i]);

        first_fwd_slash = strchr(protocol, '/');
        if (0 == first_fwd_slash)
        {
            url_stripped = strdup(protocol);
        }
        else
        {
            const size_t size = first_fwd_slash - protocol + 1;
            url_stripped = malloc(sizeof(char) * size);
            memcpy(url_stripped, protocol, size - 1);
            *(url_stripped + size - 1) = 0;
        }
        break;
    }
    url_stripped = 0;
}

if (0 != url_stripped)
{
    printf("[%s]\n", url_stripped);
    free(url_stripped);
}
1 голос
/ 05 декабря 2011

У меня есть следующая строка: "http://www.google.ie/" Я хочу создать строка "www.google.ie"

Вы можете сделать это (меньше кода, максимальная скорость):

#define protocol  "http://"
#define host      "www.google.ie"
#define slash     "/"

// "http://www.google.ie/"
printf("Whole string: %s\n", protocol host slash);

// "www.google.ie"
printf("URL only: %s\n", host);

Легко, правда?

1 голос
/ 05 декабря 2011

Есть довольно много способов сделать это на самом деле.Вы не особо указали, что код должен делать в целом.Например, что вы хотите выделить в этой строке: "/7856769/c-novichka-razbit-stroku"

В любом случае, если вы просто хотите потерять это" http://" и последнее "/", я бы предложил использовать этот код:

char url[] = "http://www.google.ie/";
    char url_stripped[100];
    sscanf(url, "http://%s", url_stripped);//get new string without the prefix "http://"
    url_stripped[strlen(url_stripped)-1] = '\0';//delete last charactar (replace with null terminator)
    printf("%s\n",url_stripped);

Функция "sscanf" может очень пригодиться в таких ситуациях.Он работает так же, как "fscanf" и "scanf", но вводом является строка.Что касается строки "char url_stripped [100];"убедитесь, что у вас достаточно места или используйте malloc (strlen (url) +1);и бесплатно ();когда вам больше не нужна строка.

1 голос
/ 05 декабря 2011

Как насчет проверки, начинается ли строка с "http://" или "https://", затем пропустить семь или восемь символов, а затем выполнить поиск первого '/'?

char *url="http://www.google.ie/";
char *tmp = url;
char *stripped_url;

if (strncmp(tmp, "http://", 7) == 0 || strncmp(tmp, "https://", 8) == 0)
    tmp += (tmp[4] == 's') ? 8 : 7;  /* Skip over the "http://" or "https://" */

char *slash = strchr(tmp, '/');
if (slash != NULL)
    stripped_url = strndup(tmp, slash - tmp);  /* slash-tmp is the length between start of the string and the slash */
else
    stripped_url = strdup(tmp);

printf("domain name = \"%s\"\n", strupped_url);

free(stripped_url);
1 голос
/ 05 декабря 2011

Вы должны токенизироваться, используя /

char url[]="http://www.google.ie/";
char* url_stripped=strtok(url,"/");
url_stripped=strtok(NULL,"/");
printf("%s\n",url_stripped);
...