Верните оставшуюся строку на c без использования strtok

#c

#c

Вопрос:

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

Ожидаемый результат должен быть:

Строка

в

C

 int main()
{
    /* loop over a string using subscript*/
    char *s = "String in C";
    char* ps;
    ps = s;
    while(*ps != ' ')
    {
        printf("%c",*ps);
        ps  ;
    }
}
  

Я могу получить первую строку.

Как я могу получить оставшуюся часть?

Комментарии:

1. Добавить дополнительный цикл? (или используйте конечный автомат)

Ответ №1:

Это не лучшее решение, но оно работает.

 #include <stdio.h>

int main()
{
    char *s = "String in C";
    char *ps;
    ps = s;
    while (*ps != '')
    {
        if (*ps == ' ')
        {
            printf("n");
            *ps  ;
        }
        else
        {
            printf("%c", *ps);
            ps  ;
        }
    }
}
  

Комментарии:

1. Ох. Это работает. Но если я верну значение вместо использования printf, как мне увеличить ps?

2. Что вы имеете в виду? Я не получил «вернуть значение»

3. Я имею в виду, что вместо использования printf я хотел бы использовать return . В таком случае, как я могу увеличить?

4. return приведет к завершению программы, в этом случае вы получите, String тогда программа найдет ' ' , перейдет в условия и завершит работу, поскольку она столкнулась с return

Ответ №2:

Вам нужно изучить логику вашей программы.

Что вы делаете прямо сейчас, так это то, что вы прекращаете итерацию сразу после первого слова, когда встречается первый пробел; это то, что while(*ps != ' ') делает.

Вместо этого вы можете выполнить итерацию по всей строке, воспользовавшись тем фактом, что строка в C заканчивается на , т.е. while (*ps != '') .

Внутри while вы можете сначала проверить, является ли символ пустым, и если это так, вы можете продвинуть указатель и перейти к следующему символу с помощью continue :

     if (*ps == ' ') {
        printf("n");
        ps  ;
        continue;
    }
  

Обратите внимание, что код также выводит новую строку для удобства чтения. Это if также должно быть первым делом в цикле, и таким образом он также пропустит конечные пробелы.

Остальная часть кода — это то, что у вас есть сейчас, хотя вы можете захотеть добавить еще одну новую строку printf после while цикла.