#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
цикла.