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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Новый диалог не слушается http://www.cyberforum.ru/cpp-beginners/thread152995.html
такая проблема, добавляю к проекту новый диалог IDD_DIALOG2, на основой вешаю кнопку и для неё обрабочик void CTestDialog::OnButton1() { // TODO: Add your control notification handler code here CDialog dlg(IDD_DIALOG2); dlg.DoModal(); } на второй диалог добавляю какой-нить контрол и.. и ничего, ничего не работает, кроме кнопок ok и cancel, нет я конечно умею кнопки запрограммировать на...
C++ определить достижимость графа определить достижимость графа(относительно каждой вершины) плизззз кто сможет написать программу на С http://www.cyberforum.ru/cpp-beginners/thread152968.html
C++ Перестановка
Уважаемые профи, я в Си нуб.Каким образом можно реализовать строчную перестановку(все варианты)? То есть вводим LOL, а программа выведет OLL,LLO,LOL. Заранее спасибо
C++ Найти все вершины орграфа, от которых существует путь заданной длины к выделенной вершине
Найти все вершины орграфа, от которых существует путь заданной длины к выделенной вершине.
C++ почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? http://www.cyberforum.ru/cpp-beginners/thread152927.html
почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён?
C++ определить является ли связанным граф помогите пожалуйста: определить является ли связанным граф на си подробнее

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

Написал) Без проблем, но что-то кажется что я написал говно-код...
Параметры написания. Нету волшебных чисел, кроме размера одного буфера. Все через динамические массивы. Сам массив строк двумерный динамический. На функции не разделял. Строка 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru