Вопрос по С++ Надо было составить программу чтобы считывала текст из файла и выводила...

0 голосов
94 просмотров

Вопрос по С++
Надо было составить программу чтобы считывала текст из файла и выводила количество маленьких (4-8 символов) слов во всех строках текста
То что придумал
#include "stdafx.h"
#include
#include
#include
#include
using namespace std;

int main(int argc, _TCHAR* argv[])
{
FILE *text;
char *filename = "C:\\Myfile.txt";
char buf[101] = "";
char commentStr[101] = "";

if (!(fopen_s(&text, filename, "r")))
{
while (fgets(buf, 100 , text))

printf_s("%s", buf);


char* pmin = NULL;
size_t pminlen = 0;

char* head;
char* tail;

while (*tail)
{
for (head = tail; *head && !isalnum(*head); ++head) { ; }

for (tail = head; *tail && isalnum(*tail); ++tail) { ; }

if (head < tail)
{
if ((pmin == NULL) || (pminlen > tail - head));
{
pmin = head;
pminlen = tail - head;
}
}
}
if (pmin)
{
printf("\n");
printf("min = %.*s\n", pminlen, pmin);
}

system("pause");

return 0;
}
ничего не выдает в чем ошибка ( как мне кажется их тут дофига)


Информатика (17 баллов) | 94 просмотров
Дан 1 ответ
0 голосов

Не люблю сишные приколы, даже не стал ковырять в коде. Я бы так написал:

1. Листинг программы:
#include
#include
#include
using namespace std;

int main()
{
ifstream f("words.txt");
int MAX_WORD = 6;
if(!f.is_open())
{
cout <<"Ошибка открытия файла!" <<endl;<br> return 1;
}
string str;
int line=1;
int len=0, cnt=0;
while(!f.eof())
{
getline(f, str);
for(int i=0; i!=str.length(); ++i)
{
if(str[i]!=' ')
++len;
else
{
if(len<=MAX_WORD)<br> {
++cnt;
len=0;
}
else
len=0;
}
}
cout <<line <<". Коротких слов: " <<cnt <<endl;<br> cnt=0;
++line;
}

return 0;
}

2. Тестовый файл:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vehicula tortor nec enim dictum, quis accumsan quam ultricies.
Maecenas suscipit urna sed leo pellentesque pellentesque. Donec lorem libero, mattis ac lobortis et, porta ac felis. Pellentesque at dui sollicitudin mauris cursus dignissim.
Integer aliquam metus eu ligula rutrum, non ultricies libero molestie. Proin posuere ante velit, quis luctus arcu efficitur a.
Suspendisse sed interdum dolor.
Integer laoreet, mi non pulvinar sagittis, leo mi semper mauris, sed fermentum est lorem sed neque.
Duis neque justo, facilisis at magna quis, molestie varius dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Aenean at nulla massa. Proin interdum turpis justo, ac ultricies mauris molestie vitae. In erat augue, elementum in placerat vitae, venenatis quis metus.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer hendrerit interdum tellus, sit amet porttitor diam consequat quis.
Vivamus dignissim aliquam ex, eu maximus augue commodo a. Morbi molestie convallis urna ac faucibus. Mauris eget aliquet est. Nulla luctus fringilla magna, ut viverra elit porta sit amet.
Curabitur at tortor eget dolor tincidunt iaculis. Praesent odio libero, vestibulum lobortis est id, porta aliquam tortor.
Quisque fringilla nibh ut tellus dignissim, at pulvinar mauris faucibus.
Suspendisse eu metus vestibulum, vestibulum ligula sed, pharetra tellus. Etiam ultrices consectetur congue. Nulla at dignissim urna. Sed pretium augue ipsum, in egestas massa tempor sed.
Ut id tincidunt lacus, tristique hendrerit arcu. Quisque ultrices sem consectetur risus gravida, nec tristique tellus egestas. Nunc eleifend non diam elementum scelerisque.
In ac dui in neque euismod volutpat eu sit amet metus. Donec iaculis leo urna, ut mattis est commodo in. Phasellus sollicitudin, ante sit amet rhoncus dignissim, velit mauris
scelerisque neque, posuere ultrices ante augue eget libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Morbi metus nulla, tincidunt vitae congue id, sollicitudin et neque. Maecenas suscipit vel sapien hendrerit lobortis. In feugiat nulla massa.
Fusce nec gravida nunc. Integer nec odio a eros luctus auctor. Fusce blandit quam id dolor vestibulum feugiat. Cras tincidunt id felis ac ultricies. Proin feugiat hendrerit feugiat.
Vestibulum congue leo ex, pulvinar sagittis ipsum venenatis eu. In vitae dolor in odio lacinia laoreet. Vivamus eget rhoncus felis. Nulla ullamcorper lorem quis ultrices iaculis.
Aliquam facilisis mattis lacus. Morbi et volutpat odio. Sed posuere, odio at faucibus dapibus, ex nisl auctor elit, et vehicula lectus ex sit amet lectus.
Pellentesque viverra dignissim urna et feugiat. Nunc vitae justo nec ex vehicula dapibus. Ut sed sem laoreet, sollicitudin dui fermentum, congue velit.
In interdum augue velit, a viverra lectus porta eu. Curabitur malesuada placerat lobortis. Praesent ullamcorper ullamcorper elit, eget mollis dolor.
Vestibulum malesuada accumsan leo, non maximus nisl. Donec nec nunc tellus. Fusce volutpat hendrerit urna, et egestas nibh vestibulum eget.
Cras pharetra rutrum libero non blandit.

3. Прогон программы:
(см. скриншот).


image
(1.7k баллов)
0

нет проверки на знаки пунктуации (., и пр.), они считаются как часть слова. если нужно их учитывать, добавь соответствующую проверку к пробелу типа if(str[i]!=' ' || str[i]!='.' || str[i]!=',') .....