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

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

Войти
Регистрация
Восстановить пароль
 
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
#1

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

10.07.2010, 23:44. Просмотров 563. Ответов 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 - C++
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется текстовый файл 2.txt c таким...

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

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

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

Адрес строки в текстовом файле - C++
Здравствуйте Господа и Дамы. У меня такой вопрос. Есть текстовый файл. Скачиваю его в оперативку. В каждой строчки есть указание на...

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

6
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2010, 00:05 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как-то так:
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
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
11.07.2010, 00:05  [ТС] #3
CyBOSSeR, Спасибо конечно... Но я же писал что не стринг... Если бы надо было сделать через стринг сделал бы...

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

Не по теме:

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

0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

Перенос строки в текстовом файле - C++
Здравствуйте, есть два текстовых файла, я считываю из одного и записываю в другой, если попадается символ &quot;N&quot; нужно сделать перенос строки....

Перевод из строки в число в текстовом файле - C++
Доброго всем программистам дня или ночи! Написал программу, которая вычисляет к примеру x,y,z. Есть текстовый файл: text.txt (яблоко x...

Расположить строки в обратном порядке в текстовом файле - C++
В произвольном текстовом файле расположить строки в обратном порядке. Помогите плиз)

Удалить в текстовом файле все пустые строки - C++
Задан текстовый файл, удалить в нем все пустые строки. Выдать сообщение, что строки удалены или таковых строк не имеется.


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

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

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