вывод strtok () отличается - PullRequest
       9

вывод strtok () отличается

0 голосов
/ 22 апреля 2019

Я хочу сравнить две строки, которые также содержат некоторые другие символы.Для устранения этих символов я использую strtok ()

Сначала я копирую строки в временные буферы, которые я буду использовать в strtok ().

    #include<stdio.h>
    #include<string.h>
    int main()
    {
            char ch[50]="supl-dev.google.com";
            char ch1[50]="*.google.com";
            printf("ch =%s\n",ch);
            printf("ch1 =%s\n",ch1);
            char temp_ch[50], temp_ch1[50];
            strcpy(temp_ch,ch);
            strcpy(temp_ch1,ch1);
            char *ch_token, *ch1_token;

            ch_token = strtok(temp_ch,".");
            ch1_token = strtok(temp_ch1,"*");
            printf("ch_token=%s\n",ch_token);
            printf("ch1_token = %s\n",ch1_token);

            return 0;
    }

Ожидаемые результаты:

ch = supl-dev.google.com

ch1 = *. Google.com

ch_token = supl-dev

ch1_token = *

Фактические результаты:

ch = supl-dev.google.com

ch1 = *. Google.com

ch_token = supl-dev

ch1_token = .google.com

Здесь я ожидаю, что ch1_token должен содержать '*'.

Ответы [ 4 ]

2 голосов
/ 22 апреля 2019

Неа.Ваше ожидание неверно.Вы устанавливаете свой разделитель для ch2 на *, что означает, что strtok удалит ведущий * в *.google.com и вернет .google.com в качестве первого токена.Чтобы получить то, что вы хотите, вы должны установить разделитель на ..

    #include<stdio.h>
#include<string.h>
int main()
{
        char ch[50]="supl-dev.google.com";
        char ch1[50]="*.google.com";
        printf("ch =%s\n",ch);
        printf("ch1 =%s\n",ch1);
        char temp_ch[50], temp_ch1[50];
        strcpy(temp_ch,ch);
        strcpy(temp_ch1,ch1);
        char *ch_token, *ch1_token;

        ch_token = strtok(temp_ch,".");
        ch1_token = strtok(temp_ch1,".");
        printf("ch_token=%s\n",ch_token);
        printf("ch1_token = %s\n",ch1_token);

        return 0;
}

Теперь ch_token должно быть supl-dev, а ch1_token должно быть *.

1 голос
/ 22 апреля 2019

вы разделяете ch1 на *, поэтому его результатом является пустая строка, которая игнорируется, а остальная строка - .google.com. (Игнорирует *, потому что это ваш разделитель). просто измените код разделения на ch1_token = strtok(temp_ch1,".");, и он вернет *, google, а затем com.

1 голос
/ 22 апреля 2019

Следует помнить, что strtok будет продолжать поиск следующего токена, если текущий токен пуст.

Итак, когда вы strtok строка *.google.com с разделителем *, он находит разделитель в самой первой позиции. Поскольку текущий токен пуст, возвращается следующий токен, равный .google.com

0 голосов
/ 22 апреля 2019

Ваша заявленная потребность заключается в поиске общей подстроки в двух строках.
Использование strtok может работать, но есть более простые способы сделать это без разбора.

Рассматривали ли вы возможность использования strstr () ] ?

    char ch[50]="supl-dev.google.com";
    char ch1[50]="*.google.com";
    if((strstr(ch, "google.com")) && (strstr(ch1, "google.com"))
    {
        /// sub-string exists in both strings
    }
...