Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
HeRo!N
11 / 11 / 1
Регистрация: 01.10.2010
Сообщений: 139
#1

Найти самую длинную строку в файле - C++

29.06.2011, 15:50. Просмотров 2070. Ответов 4
Метки нет (Все метки)

Вроде все норм, вот только когда пытаюсь вывести через puts() - выводит все содержимое файла посимвольно и в столбик, а через Printf() - выводит какие то квадраты.

Компилятор Borland C++ 3.11

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string.h>
#include <conio.h>
#include <stdio.h>
 
FILE *f;
char s[255];
int i=0;
void main()
{
f=fopen("C:\\asd.txt","rt"); 
clrscr();
while(!feof(f))
 {fscanf(f,"%c",&s);
 if (strlen(s)>i) i=strlen(s); //находим длину самой большой строки
  }
rewind(f);
while(!feof(f))
{fscanf(f,"%c",&s);
 if (strlen(s)==i) puts(s);} //если длина строки совпадает с найденной максимальной, то выводим её 
fclose(f);
getch();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 15:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти самую длинную строку в файле (C++):

Найти самую длинную строку в файле - C++
Есть задача: Дан произвольный файл с некоторым количеством строк. Найти самую длинную строку и вывести ее. Попытался реализовать...

Найти в файле самую длинную строку и переписать её в другой файл - C++
всем привет возник такой вопрос есть файл в который вносятся числа разного количества. по этому есть несколько строк введённых чисел....

[C] Найти самую длинную строку и поместить ее после самой короткой - C++
Найти самую длинную строку и поместить ее после самой короткой.

Дан текстовый файл.Найти самую длинную строку и её длину - C++
Помогите, подготовиться к отчету.Дан текстовый файл.Найти самую длинную строку и её длину.на языке С++.

Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку - C++
Открыть заданный текстовый файл, найти в нем и вывести на экран самую длинную строку. Имя файла должно передаваться в программу в виде...

Определить самую длинную строку в тексте - C++
Определить самую длинную строку в тексте. Найденную строку передавать в главную функцию. И ещё, не могу понять почему если задать размер...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
29.06.2011, 16:23 #2
Вместо
C
1
puts(s)
напиши
C
1
printf("%s",s)
1
HeRo!N
11 / 11 / 1
Регистрация: 01.10.2010
Сообщений: 139
29.06.2011, 16:29  [ТС] #3
через
C++
1
printf("%s",s)
выводит весь файл =(

хм...и почему то i=1, вероятно я не правильно считываю строку из файла...
0
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
29.06.2011, 16:38 #4
Ой намутили мне тут, вот держите:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string.h>
#include <conio.h>
#include <stdio.h>
 
FILE *f;
char s[255];
int i=0;
int main()
{
f=fopen("C:\\asd.txt","rt");
clrscr();
while(!feof(f))
 {fscanf(f,"%s",&s);
 if (strlen(s)>i) i=strlen(s); //находим длину самой большой строки
  } 
rewind(f);
while(!feof(f))
{fscanf(f,"%s",&s);
 if (strlen(s)==i) printf("%s",s);} //если длина строки совпадает с найденной максимальной, то выводим её 
fclose(f);
getch();
}
И на будущее! Учите спецификации!!! Для одного символа %с, для строки символов %s
1
HeRo!N
11 / 11 / 1
Регистрация: 01.10.2010
Сообщений: 139
30.06.2011, 17:29  [ТС] #5
Препод сказал мол нужно переделать прогу так, чтобы считывать строку посимвольно пока не встретиться символ конца строки в файле - '\n', т.е. размер строки заранее не известен и мы не можем указать допустим char s[200];
И опять у меня проблемы с выводом нужной строки....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <process.h>
 
int fil()
{
FILE *f;
char s;
int dl=0,max=0,dl1=0;
 
f=fopen("C:\\asd.txt","rt");
while(!feof(f))
{
 fscanf(f,"%c",&s);
 if (s=='\n') {
         if (dl>max) max=dl;
         dl=0;
         }
 if (s!='\n')dl++;
 }
 
int x=0;
printf("\n„«Ё** бва®ЄЁ - %d\n",max);
dl=0;
rewind(f);
while(!feof(f))
{
 fscanf(f,"%c",&s);
if(dl==dl1)x=0;
 if (s=='\n'){
        if (dl==max&&x==0) {fsetpos(f,0);x=1;}
        if (x) printf("%c\n",s); //ПРОБЛЕМА ТУТ
        dl=0;
        }
 if (x) dl1++;
 
 if (s!='\n')dl++;
 
}
 
fclose(f);
return 0;
 
}
 
int main()
{
clrscr();
fil();
getch();
return 0;
}
Добавлено через 39 минут
упс...нашел ошибку))

Добавлено через 26 минут
Еще вопрос, как мне сохранить текущее положение курсора в файле в переменную, а затем в дальнейшем поставить курсор на это место??
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 17:29
Привет! Вот еще темы с ответами:

Удалить самую длинную строку матрицы - C++
1. Критерий для поиска в массиве структур: Сотрудники со стажем более 10 лет и заработной платой более 15000! 2. Задача для обработки...

Записать в файл последовательность строк. Самую длинную строку удалить - C++
Записать в файл последовательность строк. Самую длинную строку удалить. Помогите новичку

Указатели. Сформировать массив строк. Удалить из него самую длинную строку - C++
Сформировать массив строк. Удалить из него самую длинную строку Добавлено через 16 часов 19 минут Что никто не знает как??

Запомнить самую длинную строку и выдать её после окончания работы цикла ввода - C++
2. На вход символьного фильтра подаются строки. Фильтр запоминает самую длинную строку и выдает её после окончания работы цикла ввода.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.06.2011, 17:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru