Все вопросительные предложения вывести отдельно от восклицательных - C (СИ)
Формулировка задачи:
ввести строку все вопросительные предложения вывести отдельно от восклицательных.
мой код:
Если ввести просто вопросительное или восклицательные предложения то все работает,но если вместе то к примеру не выводится либо вопросительные предложения или восклицательные.Помогите пожалуйста(желательно исправьте существующую программу).
#include <stdio.h> #include <string.h> #include <conio.h> int main() { int i=0,len=0,k=0; char str[80],str1[80],str2[80]; gets(str); len=strlen(str); printf("dlina stroki=%d",len); puts("\n"); for(i=0;i<len;i++) { if(str[i]=='?') { k=i; for(i=0;i<=k;i++) { str1[i]=str[i]; } for(i=1;i<len;i++) { str[i]=str[i+k]; } } else if(str[i]=='!') { k=i; for(i=0;i<=k;i++) { str2[i]=str[i]; } for(i=1;i<len;i++) { str[i]=str[i+k]; } } } puts(str1); puts(str2); getch(); }
Решение задачи: «Все вопросительные предложения вывести отдельно от восклицательных»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> int main () { char str[256], str1[256] = {0}, str2[256] = {0}; char *st, *end, *tp; printf ("Enter the string: "); gets (str); // Начнем бегать по строке, пока не натолкнемся на ., ? или ! end = str; st = str; while (1) { if (*end == 0) break; // Если дошли до конца строки - выходим if ((*end == '.') || (*end == '?') || (*end == '!')) { tp = end; // Сохраняем указатель на знак предложения end++; // Если это не последняя запись - то ставим разделитель if (*end != 0) *end++ = 0; switch (*tp) { case '?': strcat (str1, st); strcat (str1, "\n"); break; case '!': strcat (str2, st); strcat (str2, "\n"); break; default: break; } st = end; } else end++; } printf ("Interrogative sentences:\n%s", str1); printf ("Exclamatory sentences:\n%s", str2); return 0; }
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки для работы со строками и памятью.
- В функции main() объявляются три строки: str, str1 и str2, а также указатель st, который будет указывать на текущий символ входной строки, и указатель end, который будет указывать на следующий символ после текущего.
- Пользователю предлагается ввести строку.
- Затем начинается цикл, который продолжается до тех пор, пока не будет достигнут конец строки или не будет встречен знак вопроса, восклицательный знак или точка.
- Если был встречен один из этих знаков, то его позиция сохраняется в переменной tp, а затем происходит переход к следующему символу.
- Если это не последний символ в строке, то перед следующим символом ставится разделитель (ноль).
- В зависимости от значения tp (то есть от того, был ли встречен знак вопроса, восклицательный знак или точка), в соответствующую переменную (str1 или str2) добавляется строка, начиная с текущего символа и заканчивая последним символом перед знаком предложения.
- Затем происходит переход к следующему символу.
- После окончания цикла выводятся полученные строки.
- Программа завершается возвратом нуля.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д