Вычислить процент слов, начинающихся с некоторой, введенной с клавиатуры буквы - C (СИ)

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

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

2.Дан текстовый файл, каждая строка которого представляет собой некоторую последовательность слов, вычисляет процент слов, начинающихся с некоторой, введенной с клавиатуры буквы. Вот код:
#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;
}
Проблема в следующем: При дебаге считает количество слов в предложении(a) на одну меньше,чем имеется) и выдает следующую ошибку: Run-Time Check Failure #2 - Stack around the variable 'buf' was corrupted.

Решение задачи: «Вычислить процент слов, начинающихся с некоторой, введенной с клавиатуры буквы»

textual
Листинг программы
while(buf[i]!='.')
{if(buf[i]==' '&&buf[i+1]!=' '&&buf[i+1]!='.')a++;
i++;}

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

В данном коде выполняется следующая последовательность действий:

  1. Переменная buf содержит строку, введенную пользователем.
  2. Переменная i инициализируется значением 0.
  3. В цикле while с условием buf[i]!='.' происходит проход по всем символам строки до тех пор, пока не будет найден символ точки.
  4. Внутри цикла проверяется условие buf[i]==' '&&buf[i+1]!=' '&&buf[i+1]!='.'
    • Если условие выполняется, то переменной a присваивается значение 1.
    • Если условие не выполняется, то происходит переход к следующему символу строки с помощью оператора i++.
  5. После выхода из цикла while, значение переменной a будет содержать количество слов в строке, начинающихся с введенной буквы.
  6. Для получения процента слов, начинающихся с введенной буквы, переменной a делится на длину строки и умножается на 100.

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


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

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

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