Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
#1

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

10.07.2010, 23:44. Просмотров 606. Ответов 6
Метки нет (Все метки)

Задача была написать программу.
В заданном текстовом файле найти:
самую длинную строку.
все строки начинающиеся с символа А.
все строки, в которых имеется более трех пробелов.

Написал) Без проблем, но что-то кажется что я написал говно-код...
Параметры написания. Нету волшебных чисел, кроме размера одного буфера. Все через динамические массивы. Сам массив строк двумерный динамический. На функции не разделял. Строка char. НЕ стринг. Можно ли сделать это как-нибудь короче и покрасивше? Разделение на функции не предлагать)

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <cstring>
#include <fstream>
int main()
{
    char Str[255];
    char**A;
    int count_str=0; 
    int*count_symb;
    int*count_symb_of;
    int*count_spaces;
    std::ifstream f;
    f.open("Test.txt");
    if(!f)
    {
        std::cout<<"Error\n";
        exit(1);
    }
    while(!f.eof())
    {
        f.getline(Str, sizeof(Str));
        count_str++;
    }
    A=new char*[count_str];
    count_symb=new int[count_str];
    count_symb_of=new int[count_str];
    int i=0;
    f.clear();
    f.seekg(0);
    while(!f.eof())
    {
        f.getline(Str, sizeof(Str));
        A[i]=new char[strlen(Str)+1];
        count_symb_of[i]=strlen(Str)+1;
        i++;
    }
    i=0;
    f.clear();
    f.seekg(0);
    while(!f.eof())
    {
        f.getline(A[i],count_symb_of[i]);
        count_symb[i]=strlen(A[i]);
        i++;
    }
    int max=count_symb[0];
    for(i=0;i<count_str;i++)
    {
        if(count_symb[i]>max)
        {
            max=count_symb[i];
        }
    }
    for(i=0;i<count_str;i++)
    {
        if(count_symb[i]==max)
            std::cout<<"Str which have max lenght: "<< A[i] <<'\n';
    }
    for(i=0;i<count_str;i++)
    {
        if(strnicmp(A[i],"A",1)==0)
            std::cout<<"[ "<<i<<" ] string have A or a in the begining: "<< A[i] <<'\n';
    }
    count_spaces=new int[count_str];
    for(i=0;i<count_str;i++)
        count_spaces[i]=0;
    for(i=0;i<count_str;i++)
    {
        for(int j=0;j<count_symb_of[i];j++)
        {
            if(A[i][j]==' ')
                count_spaces[i]++;
        }
    }
    for(i=0;i<count_str;i++)
    {
        if(count_spaces[i]>3)
            std::cout<<"[ "<<i<<" ] string have more than 3 spaces "<< A[i] <<'\n';
    }
    for(i=0;i<count_str;i++)
        delete[] A[i];
    delete[] A;
    delete[] count_spaces;
    delete[] count_symb;
    delete[] count_symb_of;
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2010, 23:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти в текстовом файле строки по условию (C++):

В текстовом файле найти длину самой длинной строки, и вывести на экран все строки данной длины
В данном текстовом файле найти длину самой длинной строки и вывести на экран...

В заданном текстовом файле найти строки с указанными параметрами
Помогите пожалуйста с задачей. Есть текстовый фаил такого формата: Нужно...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444...

Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину
Найти максимальную длину строки в текстовом файле и распечатать все строки...

Найти в текстовом файле самое длинное слово и записать его во второй файл с указанием номера строки и номером слова
Найти в текстовом файле самое длинное слово и записать его во второй файл с...

Пронумеровать строки в текстовом файле
c++ только начал изучать, надо написать програмку которая пронумерует строки в...

6
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2010, 00:05 #2
Лучший ответ Сообщение было отмечено ForEveR как решение

Решение

Как-то так:
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
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
 
int main() {
  std::ifstream file("filename.ext");
 
  std::string              longest;
  std::vector<std::string> start_with_A;
  std::vector<std::string> have_more_than_3_whitespace;
 
  while (file) {
    std::string str;
 
    std::getline(file, str);
 
    if (str.length() > longest.length())
      longest = str;
 
    if (!str.empty() && str[0] == 'A')
      start_with_A.push_back(str);
 
    if (std::count(str.begin(), str.end(), ' ') > 3)
      have_more_than_3_whitespace.push_back(str);
  }
 
  return 0;
}
Не проверял. Вывод результатов не делал.
Цитата Сообщение от Lavroff Посмотреть сообщение
Строка char. НЕ стринг.
Это ты зря. Не стоит в C++ использовать строки в стиле Си.
Цитата Сообщение от Lavroff Посмотреть сообщение
Все через динамические массивы.
Тоже зря. STL предлагает гораздо более удобные контейнеры.
2
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.07.2010, 00:05  [ТС] #3
CyBOSSeR, Спасибо конечно... Но я же писал что не стринг... Если бы надо было сделать через стринг сделал бы...

Это тренировка. До СТЛ чуть-чуть осталось. Вот сейчас файловую систему довершу и стл. А пока С средствами
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2010, 00:08 #4
Lavroff, а против векторов ты ничего не имеешь?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.07.2010, 00:14  [ТС] #5
CyBOSSeR, Имею) Пока использую только то, что прочитал. А это почти весь базовый с++ без стл.
0
CyBOSSeR
11.07.2010, 00:16
  #6

Не по теме:

Цитата Сообщение от Lavroff Посмотреть сообщение
Имею)
Так не интересно

0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.07.2010, 06:17  [ТС] #7
CyBOSSeR,

Не по теме:

Кстати. По поводу того, что вы написали (программу) интуитивно все понятно. Жаль, что не подходит пока что)



Добавлено через 5 часов 56 минут
CyBOSSeR, Вы были правы. Сейчас сижу изучаю СТЛ. На данный момент векторы+некоторые алгоритмы посмотрел. Сижу переделываю программы без СТЛ с массивами из первой части книги под векторы (используя индесную адресацию, итераторы и алгоритмы вместе, оставляю обычно только алгоритмы, остальное в комменты загоняю). Шикарное средство
0
11.07.2010, 06:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2010, 06:17
Привет! Вот еще темы с решениями:

Перенос строки в текстовом файле
Здравствуйте, есть два текстовых файла, я считываю из одного и записываю в...

Отцентрировать строки в текстовом файле
Считаем, что длина строк текстового файла не превышает 80 символов....

Длина строки в текстовом файле
Найти максимальную длину строки в текстовом файле и распечатать все строки...

Адрес строки в текстовом файле
Здравствуйте Господа и Дамы. У меня такой вопрос. Есть текстовый файл....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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