Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2018, 22:03   #1
faddey
 
Регистрация: 25.04.2018
Сообщений: 5
Сообщение (С++/С) Дан файл, содержащий текст на английском языке.

Дан файл, содержащий текст на английском языке. Определить сколько раз встречается в нём слова длиной в самое короткое слово.
Имеется программа на паскале:
Код:
uses Crt;
var s,s1,smin : string;
    k : integer;
    f : text;
begin
   ClrScr;
   Assign(f, '1.txt');
   {$I-}
   Reset(f);
   {$I+}
   if (IOResult <> 0) then
   Begin
    writeln('Error');
    exit;
   end;
   smin:='';
   While not Eof(f) do begin
     Readln(f, s);
     While Pos('  ',s)>0 do Delete(s,Pos('  ',s),1);
	 While Pos('.',s)>0 do Delete(s,Pos('.',s),1);
	 While Pos(',',s)>0 do Delete(s,Pos(',',s),1);
     if s[1]=' ' then Delete(s,1,1);
	 if s[1]='.' then Delete(s,1,1);
	 if s[1]=',' then Delete(s,1,1);
     if s[Length(s)]=' ' then Delete(s,Length(s),1);
	 if s[Length(s)]='.' then Delete(s,Length(s),1);
     While s<>'' do begin
     if Pos(' ',s)>0 then begin
         s1:=Copy(s,1,Pos(' ',s)-1);
         Delete(s,1,Pos(' ',s));
       end else begin
         s1:=s;  s:='';
       end;
       if (smin='') or (Length(s1)<Length(smin)) then smin:=s1;
     end;
   end;
   Close(f);

   Reset(f);
   k:=0;
   While not Eof(f) do begin
     Readln(f, s);
     {Udalyaem lishnie probeli}
     While Pos('  ',s)>0 do Delete(s,Pos('  ',s),1);
     if s[1]=' ' then Delete(s,1,1);
     if s[Length(s)]=' ' then Delete(s,Length(s),1);

     While s<>'' do begin
       if Pos(' ',s)>0 then begin
         s1:=Copy(s,1,Pos(' ',s)-1);
         Delete(s,1,Pos(' ',s));
       end else begin
         s1:=s;  s:='';
       end;
       if s1=smin then Inc(k);
     end;
   end;
   Close(f);

   if smin<>''
     then Writeln('Slovo "',smin,'" vstrechaetsya ',k,' raz')
     else Writeln('File ne soderjit slov');
   Readln;
end.
Нужно перевести на С++/С или можно написать новую. Тут нашёл похожую программу, только вот она ищет самое длинное слово и не проверяет на разделители (пробел, точка, запятая).
Код:
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
const int n = 100;
int main()
{
	int count = 0, max = 0;
	char res[n], s[n], *p;
	cout << "Enter string: ";
	gets(s);
	for(p = strtok(s, " "); p; p = strtok(NULL, " "))
	{
		if(strlen(p) > max)
		{
			max = strlen(p);
			strcpy(res,p);
		}
		if(strstr(p,res))
			count++;
	}
	cout << "\nSamoe dlinoe slovo: " << res;
	cout << "\n\nPovtoraitsya raz: " << count;
	getch();
	return 0;
}
Прошу помощи
faddey вне форума Ответить с цитированием
Старый 26.04.2018, 08:19   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

сюда ходи.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.05.2018, 18:51   #3
faddey
 
Регистрация: 25.04.2018
Сообщений: 5
По умолчанию

Код:
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

const int n = 100;
int main()
{
        system("clear");
        int count = 0, min = 1000; //count - счётчик слов, min - минимальная длина слова
        char res[n],  s[n];
        FILE *f;
	char *estr;
	f = fopen("1.txt", "r");
	while (!(feof(f)))
	{
	 estr = fgets(s, sizeof(s), f);
	 if (estr == NULL)
	  if (feof(f)!=0)
	  {
	   break;
	  }
	  else
	  {
	   cout << "\nОшибка чтения из файла\n";
	  }
        for (char *p = strtok(s, " ,."); p; p = strtok(NULL, " ,."))//strtok разбиение строки на части, в первом аргументе указатель на разбиваемую строку в качестве второго аргумента принимает массив символов для разделителей
        {
                if(strlen(p) < min)//Если длина слова p меньше минимальной длины, то
                {
                        min = strlen(p);//Присвоить к переменной min длинну слова p
                        strcpy(res,p);//Скопировать слово p в (самое короткое слово) res  
                }
        }
	}
	fclose(f);
        f = fopen("1.txt", "r");
        min = 1000;//Заново присваиваем к переменной min 1000, как в начале
        while (!(feof(f)))
	{
	 estr = fgets(s, sizeof(s), f);
	 if (estr == NULL)
	  if (feof(f)!=0)
	  {
	   break;
	  }
	  else
	  {
	   cout << "\nОшибка чтения из файла\n";
	  }
         for (char *p = strtok(s, " ,."); p; p = strtok(NULL, " ,."))//проходимся по строке второй раз, узнать сколько рах встречается самое короткое слово
         {
                if(strlen(p) == strlen(res))
                {
                        count++;//Счётчик слова
                }
         }
	}
	fclose(f);
	count = count - 1;
        cout << "Самое короткое слово " << res << ", встречается " << count << " раз\n";
        return 0;
}
faddey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл, содержащий текст на русском языке. Выяснить входит ли данное слово в указанный текст,и если да, то сколько раз. NataliaShipaeva Помощь студентам 2 28.05.2013 18:07
[c++]Дан файл, содержащий текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте. Jlovenpk1 Помощь студентам 0 25.01.2013 03:16
Дан файл, содержащий текст на русском языке. Figushkin Помощь студентам 1 10.06.2010 16:20
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в др.файле тот же текст, develish151 Microsoft Office Word 4 05.05.2010 13:20
Дан файл, содержащий текст на русском языке.Составить в алфавитном порядке список слов в файл. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2008 12:05