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

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

Восстановить пароль Регистрация
 
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2010, 23:44     Найти в текстовом файле строки по условию #1
Задача была написать программу.
В заданном текстовом файле найти:
самую длинную строку.
все строки начинающиеся с символа А.
все строки, в которых имеется более трех пробелов.

Написал) Без проблем, но что-то кажется что я написал говно-код...
Параметры написания. Нету волшебных чисел, кроме размера одного буфера. Все через динамические массивы. Сам массив строк двумерный динамический. На функции не разделял. Строка 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;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 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 предлагает гораздо более удобные контейнеры.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.07.2010, 00:05  [ТС]     Найти в текстовом файле строки по условию #3
CyBOSSeR, Спасибо конечно... Но я же писал что не стринг... Если бы надо было сделать через стринг сделал бы...

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2010, 06:17     Найти в текстовом файле строки по условию
Еще ссылки по теме:

C++ Как определить в текстовом файле признак перевода строки?
Перенос строки в текстовом файле C++
C++ Адрес строки в текстовом файле

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.07.2010, 06:17  [ТС]     Найти в текстовом файле строки по условию #7
CyBOSSeR,

Не по теме:

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



Добавлено через 5 часов 56 минут
CyBOSSeR, Вы были правы. Сейчас сижу изучаю СТЛ. На данный момент векторы+некоторые алгоритмы посмотрел. Сижу переделываю программы без СТЛ с массивами из первой части книги под векторы (используя индесную адресацию, итераторы и алгоритмы вместе, оставляю обычно только алгоритмы, остальное в комменты загоняю). Шикарное средство
Yandex
Объявления
11.07.2010, 06:17     Найти в текстовом файле строки по условию
Ответ Создать тему
Опции темы

Текущее время: 05:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru