В заданном тексте вычислить количество слов в тексте и распечатать их по одному в строку - C (СИ)
Формулировка задачи:
Всем доброго вечера, заканчиваю практику в университете и осталась последняя задачка, которую надо решить на qbasic, pascal и turboC.
"В заданном тексте вычислить количество слов в тексте и распечатать их по одному в строку"
С первой частью задачи все понятно. А вот со второй косяк Не получается в С вывести слова по строкам. Обе программы написаны на qb и pascal, работают правильно, а вот с С проблема...
Прилагаю исходные коды программ, помогите разобраться с С
pascal:
qb:
С, 1 часть:
var s,s1: string; i,k: integer; kol: integer; begin readln(s); s:=s+' '; repeat if pos(' ',s)>0 then delete(s,pos(' ',s),1); until pos(' ',s)=0; k:=0; kol:=0; for i:=1 to length(s) do if s[i]=' ' then begin s1:=copy(s,k+1,i-k); writeln(s1); kol:=kol+1; k:=i; end; writeln('koli4estvo slov=',kol); readln; end.
CLS REM 's4itam kolvo slov' INPUT s$ PRINT n = 0 k = 0 s$ = s$ + " " s1$ = s$ g = 1 FOR i = 1 TO LEN(s$) letter$ = MID$(s$, i, 1) IF letter$ = " " THEN n = n + 1 PRINT MID$(s$, g, i - g) s1$ = MID$(s$, i + 1, LEN(s$) - i) g = i + 1 IF LEN(s1$) = 0 THEN EXIT FOR END IF NEXT i PRINT "OTBET: slov="; n END
#include <stdio.h> #include <conio.h> #include <string.h> int main(void) { char string[]=" "; int s,i,k,g; printf("vvedi strike: "); gets(string); s=strlen(string); k=1; for (i=0;i<s;i++) { if (string[i]==' ') k=k+1; } printf("\n"); printf("k=%d",k); getch(); }
Решение задачи: «В заданном тексте вычислить количество слов в тексте и распечатать их по одному в строку»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define DELIM " .,;:!?\t\n" int main(void){ char buf[BUFSIZ], * p; int cnt; printf("Text: "); if ( ! fgets(buf, BUFSIZ, stdin) ){ fprintf(stderr, "Can't get some string!\n"); exit(EXIT_FAILURE); } for ( cnt = 0, p = strtok(buf, DELIM); p != NULL; ++cnt, p = strtok(NULL, DELIM) ) printf("%s\n", p); printf("\n*** %d words.\n", cnt); exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Определение разделителя (DELIM) для разделения слов в тексте.
- Объявление переменных:
- buf — буфер для чтения текста из стандартного ввода;
- p — указатель на текущее слово в тексте;
- cnt — счетчик количества слов.
- Вывод приглашения для ввода текста и чтение его в буфер с помощью функции fgets.
- Проверка на успешное чтение, в случае неудачи выводится сообщение об ошибке и программа завершается.
- Использование функции strtok для разделения текста на слова и их вывода на экран.
- При инициализации strtok передается буфер (buf), в котором содержится текст, и разделитель (DELIM).
- При каждом вызове strtok после предыдущего вызова, в качестве разделителя используется NULL, что позволяет перейти к следующему слову.
- Вывод количества найденных слов с помощью функции printf.
- Выход из программы с использованием функции exit.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д