Вычислить процент слов, начинающихся с некоторой, введенной с клавиатуры буквы - C (СИ)
Формулировка задачи:
2.Дан текстовый файл, каждая строка которого представляет собой некоторую последовательность слов, вычисляет процент слов, начинающихся с некоторой, введенной с клавиатуры буквы.
Вот код: Проблема в следующем: При дебаге считает количество слов в предложении(a) на одну меньше,чем имеется) и выдает следующую ошибку: Run-Time Check Failure #2 - Stack around the variable 'buf' was corrupted.
#include "stdafx.h" #include"stdio.h" #include"stdlib.h" #include"conio.h" #include <string.h> #include <ctype.h> int _tmain(int argc, _TCHAR* argv[]) { char buf[500]; char cpy[500]; char c, *ptr1, *ptr2; int flag = 0; int i,a,b,j; float rezultat; FILE *fp; if ((fp=fopen("dann.txt","r"))==NULL) { perror("dann.txt"); return 1; } for (i=0; i<strlen(buf); i++) {fscanf (fp, "%c", &buf[i]);} printf("Enter some symbol: "); scanf("%c", &c); strcpy(cpy, buf); ptr1 = strtok(cpy, " ,."); while (ptr1) { if (ptr2 = strchr(ptr1, tolower(c))) { flag ++ ; puts(ptr1); } else if (ptr2 = strchr(ptr1, toupper(c))) { flag ++; puts(ptr1); } ptr1 = strtok(NULL, " ,."); } printf("kolitchestvo slov s dannim simvolom = %d",flag); if (!flag) printf("No words starting with '%c' found in string:\n\"%s\"\n", c, buf); j=0; b=0; a=0; i=0; if((buf[0]!=' ')&&(buf[0]!='.'))a=1; while(buf[i]!='.') {if(buf[i]==' '&&buf[i+1]!=' '&&buf[i+1]!='.')a++; i++;} rezultat=100*flag/a; printf("\n Kolichestvo slov v predlozhenii —> %d \n ",a); printf("\n Protchent slov s zadannoi bukvoi v predlozhenii —> %f \n ",rezultat); system ("pause"); return 0; }
Решение задачи: «Вычислить процент слов, начинающихся с некоторой, введенной с клавиатуры буквы»
textual
Листинг программы
while(buf[i]!='.') {if(buf[i]==' '&&buf[i+1]!=' '&&buf[i+1]!='.')a++; i++;}
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Переменная
buf
содержит строку, введенную пользователем. - Переменная
i
инициализируется значением 0. - В цикле while с условием buf[i]!='.' происходит проход по всем символам строки до тех пор, пока не будет найден символ точки.
- Внутри цикла проверяется условие buf[i]==' '&&buf[i+1]!=' '&&buf[i+1]!='.'
- Если условие выполняется, то переменной
a
присваивается значение 1. - Если условие не выполняется, то происходит переход к следующему символу строки с помощью оператора i++.
- Если условие выполняется, то переменной
- После выхода из цикла while, значение переменной
a
будет содержать количество слов в строке, начинающихся с введенной буквы. - Для получения процента слов, начинающихся с введенной буквы, переменной
a
делится на длину строки и умножается на 100.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д