Внешний цикл работает всего 1 раз - C (СИ)
Формулировка задачи:
slovo1 = strtok(vspom1, " ,.&!"); while(slovo1 != 0){ per = strrev(slovo1); puts(per); slovo2 = strtok(vspom2, " ,.&!"); while(slovo2 != 0){ if(strcmp(per,slovo2) == 0){ puts(slovo2); } slovo2 = strtok(NULL, " ,.&!"); } slovo1 = strtok(NULL, " ,.&!"); strcpy(vspom2,stroka); }
Решение задачи: «Внешний цикл работает всего 1 раз»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define SENTENCE_DELIM ".!?" #define WORD_DELIM ",: \t\n" char * strrev(char * s) { char * head, * tail, tmp; for ( head = s, tail = s + strlen(s) - 1; head < tail; ++head, --tail ) { tmp = *head; *head = *tail; *tail = tmp; } return s; } int main(void) { char sentences[] = "Just saves the world another time. Ar you Batman? Yes, it's me!"; char * sentencePtr, * sentenceTail, * wordPtr; for ( sentencePtr = strtok_r(sentences, SENTENCE_DELIM, &sentenceTail); sentencePtr; sentencePtr = strtok_r(NULL, SENTENCE_DELIM, &sentenceTail) ) { for ( wordPtr = strtok(sentencePtr, WORD_DELIM); wordPtr; wordPtr = strtok(NULL, WORD_DELIM) ) printf("%s ", strrev(wordPtr)); printf("\n"); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем две константы SENTENCE_DELIM и WORD_DELIM для разделения предложений и слов соответственно
- Создаём функцию strrev, которая переворачивает строку
- В функции main создаём строку sentences и копируем в неё заданную последовательность символов
- Используем функцию strtok_r для разделения строки на предложения и сохраняем указатель на первое слово в переменной sentencePtr
- В цикле выводим все слова в предложении, используя функцию strtok_r для получения следующего слова и применяя функцию strrev для инвертирования порядка символов в каждом слове
- После обработки всех предложений выводим итоговый результат
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д