Нахождение массива символов в строке - PullRequest
6 голосов
/ 10 апреля 2019

Я написал некоторый код, который, по моему мнению, очень близок к решению проблемы, но я не могу правильно сравнить два символа. Я не знаю, как правильно их разыграть.

Я знаю, как сделать это с помощью массивов, но я хочу знать, как это сделать с помощью указателей.

char *FindToken(char *s,char *t)
{
    while (s)
    {
        //char check = *(char*)s; tried this but it doesn't work
        while(t)
        {
            if (strcmp(s,t)){
                //return s;
                printf("%s", s);
            }
            t++;
        }
        s++;
    }
    return NULL;
}

Это оригинальная проблема:

Запишите C function вызываемый, который принимает 2 параметры: null завершенный массив символов (строка) с именем S в отношении искомой строки и второй строковый параметр с именем T. string T - это list of characters (не считая ‘\ 0’), которые являются токенами или символами, которые нужно искать в S. Не изменяйте S или T. Это будет return символьный указатель на позицию первого символа в T, который находится в S, если он найден в S, или NULL в противном случае.

Например:

printf("%s", *FindToken(“are exams over yet?”, “zypqt”)); // will display “yet?”

1 Ответ

7 голосов
/ 10 апреля 2019

Вы были почти рядом.

С небольшими проблемами.

  1. Когда вы делаете (t++), в конечном итоге вы заставляете t указывать конец своей памяти и приводить UB.
  2. strcmp не для сравнения char, как вы хотели.

char *FindToken(char *s,char *t)
{
    while (*s)
    {
        int i = 0;
        //char check = *(char*)s; tried this but it doesn't work
        while(t[i])
        {
            if (*s == t[i])) {
                printf("%s", s);
                return s;
            }
            i++;
        }
        s++;
    }
    return NULL;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...