как на 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++; // шагаем дальше`введите сюда код`

абсолютно бессмысленна. Она никогда не выполнится.

→ Ссылка