В заданном тексте вычислить количество слов в тексте и распечатать их по одному в строку - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго вечера, заканчиваю практику в университете и осталась последняя задачка, которую надо решить на qbasic, pascal и turboC. "В заданном тексте вычислить количество слов в тексте и распечатать их по одному в строку" С первой частью задачи все понятно. А вот со второй косяк Не получается в С вывести слова по строкам. Обе программы написаны на qb и pascal, работают правильно, а вот с С проблема... Прилагаю исходные коды программ, помогите разобраться с С pascal:
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.
qb:
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
С, 1 часть:
#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);
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Определение разделителя (DELIM) для разделения слов в тексте.
  3. Объявление переменных:
    • buf — буфер для чтения текста из стандартного ввода;
    • p — указатель на текущее слово в тексте;
    • cnt — счетчик количества слов.
  4. Вывод приглашения для ввода текста и чтение его в буфер с помощью функции fgets.
  5. Проверка на успешное чтение, в случае неудачи выводится сообщение об ошибке и программа завершается.
  6. Использование функции strtok для разделения текста на слова и их вывода на экран.
    • При инициализации strtok передается буфер (buf), в котором содержится текст, и разделитель (DELIM).
    • При каждом вызове strtok после предыдущего вызова, в качестве разделителя используется NULL, что позволяет перейти к следующему слову.
  7. Вывод количества найденных слов с помощью функции printf.
  8. Выход из программы с использованием функции exit.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы