как на C без разделить строку на слова по указанным символам. Доходит до 1 + и не перешагивает дальше
#include <stdio.h>
int main() {
char *str = "qtga+agafg+1354";
size_t p = 1;
while (*str++ != '\0') { // Перебираем строку до нуля
if (*str == '+') { // Ищем символ на котором прерываемся
return p;
p++; // шагаем дальше`введите сюда код`
}
printf("%c", *str);
}
return 0;
}
Ответы (2 шт):
Автор решения: avp
→ Ссылка
Для поиска символа в строке удобно использовать функцию strchr(), которую несложно реализовать самому. Например, так:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
char *
Strchr (const char *s, int c)
{
while (*s) {
if (*s == c)
return s;
s++;
}
return (char *)(c ? 0 : s);
// From the strchr manpage:
// The terminating null byte is considered part of the string, so that if c is specified as '\0', these function return a pointer to the terminator.
}
#pragma GCC diagnostic pop
После ее вызова в цикле очередное искомое слово будет начинаться с ее аргумента и заканчиваться перед возвращаемым ей указателем.
Тогда остальная программа, выбирающая слова из строки и печатающая их, может выглядеть следующим образом:
#include <stdio.h>
void
print_word (const char *s, size_t n)
{
for (size_t i = 0; i < n; i++)
putchar(s[i]);
putchar('\n');
}
char *Strchr (const char *s, int c);
int
main (int ac, char *av[])
{
char *str = "qtga+agafg+1354";
printf("Obtain words from `%s` by `+`\n", str);
char *w = str, *t;
while ((t = Strchr(w, '+'))) {
size_t n = t - w; // длина слова
print_word(w, n);
w = t + 1; // начало следующего слова
}
printf("last word: <%s>\n", w);
return puts("End") == EOF;
}
Автор решения: Sergey
→ Ссылка
Доходит до 1 + и не перешагивает дальше
А что Вы ожидаете? У вас же в программе написано:
if (*str == '+') { // Ищем символ на котором прерываемся
return p;
p++; // шагаем дальше`введите сюда код`
}
Программа доходит до первого плюса и выполняет return... Т.е. выполняется завершение всей программы!
И строка
p++; // шагаем дальше`введите сюда код`
абсолютно бессмысленна. Она никогда не выполнится.