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

дан текстовый файл. получить строку в которой наименьшее число знаков препинания - C++

Войти
Регистрация
Восстановить пароль
 
Saddiel
 Аватар для Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
03.06.2013, 20:39     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #1
Здравствуйте. Дан текстовый файл. Получить строку в которой наименьшее число знаков препинания. Как реализовать сие чудо? С файлами ни разу не работал, так что не имею представления. Может кто помочь? Буду благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 20:39     дан текстовый файл. получить строку в которой наименьшее число знаков препинания
Посмотрите здесь:

Дан файл,компонентами его яв-ся числа.Число компонент делится на 2.Создать новый файл,куда будет записываться наименьшее из каждой пары чисел 1 файла C++
Дан текстовый файл, состоящий из нескольких строк. Поменять в нем местами первую и последнюю строку. C++
Дан текстовый файл F. Получить все его строки, содержащие более 60 символов. На С++ C++
Обработка файлов. Определить среднее число знаков препинания, используемых в строке C++
Считать из файла, подсчитать количество знаков препинания, записать в файл C++
Дан текстовый файл.Найти самую длинную строку и её длину C++
C++ Выборка из текстового файла знаков препинания и сохранение их в отдельный файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
03.06.2013, 21:41     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #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
#include <iostream>
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt");
    if (!text.good()) return -1;
    string str, min_punct_str;
    size_t punct_count, min_punct_count = numeric_limits<size_t>::max();
    while ( getline(text, str) ) {
        size_t punct_count =
            count_if( begin(str), end(str), ::ispunct );
        if (min_punct_count > punct_count) {
            min_punct_str.swap(str);
            min_punct_count = punct_count;
        }
    }
    cout << min_punct_str;
    text.close();
    return 0;
}
Saddiel
 Аватар для Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
04.06.2013, 12:58  [ТС]     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #3
Цитата Сообщение от Olivеr Посмотреть сообщение
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
#include <iostream>
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt");
    if (!text.good()) return -1;
    string str, min_punct_str;
    size_t punct_count, min_punct_count = numeric_limits<size_t>::max();
    while ( getline(text, str) ) {
        size_t punct_count =
            count_if( begin(str), end(str), ::ispunct );
        if (min_punct_count > punct_count) {
            min_punct_str.swap(str);
            min_punct_count = punct_count;
        }
    }
    cout << min_punct_str;
    text.close();
    return 0;
}
спасибо, но выдает ошибку на этой строчке

C++
1
count_if( begin(str), end(str), ::ispunct );
[Error] 'begin' was not declared in this scope
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 13:01     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #4
так сделайте или включите C++11
C++
1
count_if( str.begin(), str.end(), ::ispunct );
Saddiel
 Аватар для Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
04.06.2013, 13:38  [ТС]     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #5
Спасибо, хороша программа, работает на ура. Можете несколько строк вкрации объяснить если не сложно? Ну не понимаю я, не работал с файлами, не бачу

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
#include <iostream>
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt"); // ясно
    if (!text.good()) return -1; // не понимаю что значит
    string str, min_punct_str; // задаем переменные (строка которую проверяем и строка с минимальным кол-ом знаков)
    size_t punct_count, min_punct_count = numeric_limits<size_t>::max(); // не понятен смысл
    while ( getline(text, str) ) { // пока происходит считывание текста со строк 
        size_t punct_count = // не ясен
            count_if( str.begin(), str.end(), ::ispunct ); // не ясен
 
        if (min_punct_count > punct_count) { // если мин. число знаков больше числа знаков, то
            min_punct_str.swap(str); // ???
            min_punct_count = punct_count; //  иначе минимальному числу знаков (этой переменной) присвоить значение данному числу знаков, т.е строчке
        }
    }
    cout << min_punct_str; // понятно
    text.close(); // тоже собственно, даже по переводу
    return 0; // знаю
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 13:51     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #6
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 <iostream>
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt"); //файл для чтения
    if (!text.good()) return -1; //если какой-либо флаг badbit, eofbit, failbit установлен, то выход
    string str, min_punct_str; //строка и строка с мин. кол-вом пунктуальных знаков
    size_t punct_count, min_punct_count = numeric_limits<size_t>::max(); //количество пунктуальных знаков в строке с минимальным 
    //количеством пунктуальных знаков и в строке, которая сейчас проверяется
    while ( getline(text, str) ) { //пока из файла можно достать строку
        size_t punct_count =
            count_if( str.begin(), str.end(), ::ispunct ); //считаем сколько в строке пункт. знаков
        if (min_punct_count > punct_count) { //если количество пункт. знаков в проверяемой строке меньше чем 
                //в строке с минимальным количество пункт. знаков, то
            min_punct_str.swap(str); //меняем местами строки (почему не = ? а зачем копировать, если содержимое str больше не нужно? 
        //просто меняем владельца str на min_punct_str
            min_punct_count = punct_count; //устанавливаем новое количество пункт. знаков
        }
    }
    cout << min_punct_str;
    text.close();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 13:54     дан текстовый файл. получить строку в которой наименьшее число знаков препинания
Еще ссылки по теме:

Добавить в строку пробелы после знаков препинания, если они там отсутствуют C++
Дан текстовый файл. Получить новый, образованный заменой всех строчных букв прописными C++
C++ Напечатать строку текста, содержащую минимальное количество знаков препинания
Вывести в текстовый файл строку, в которой удваивается последняя буква C++
C++ Дан непустой текстовый файл. Удалить из него первую строку

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

Или воспользуйтесь поиском по форуму:
Saddiel
 Аватар для Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
04.06.2013, 13:54  [ТС]     дан текстовый файл. получить строку в которой наименьшее число знаков препинания #7
Цитата Сообщение от Olivеr Посмотреть сообщение
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 <iostream>
#include <fstream>
#include <string>
#include <limits>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt"); //файл для чтения
    if (!text.good()) return -1; //если какой-либо флаг badbit, eofbit, failbit установлен, то выход
    string str, min_punct_str; //строка и строка с мин. кол-вом пунктуальных знаков
    size_t punct_count, min_punct_count = numeric_limits<size_t>::max(); //количество пунктуальных знаков в строке с минимальным 
    //количеством пунктуальных знаков и в строке, которая сейчас проверяется
    while ( getline(text, str) ) { //пока из файла можно достать строку
        size_t punct_count =
            count_if( str.begin(), str.end(), ::ispunct ); //считаем сколько в строке пункт. знаков
        if (min_punct_count > punct_count) { //если количество пункт. знаков в проверяемой строке меньше чем 
                //в строке с минимальным количество пункт. знаков, то
            min_punct_str.swap(str); //меняем местами строки (почему не = ? а зачем копировать, если содержимое str больше не нужно? 
        //просто меняем владельца str на min_punct_str
            min_punct_count = punct_count; //устанавливаем новое количество пункт. знаков
        }
    }
    cout << min_punct_str;
    text.close();
    return 0;
}
Спасибо огромное, очень помогли!!
Yandex
Объявления
04.06.2013, 13:54     дан текстовый файл. получить строку в которой наименьшее число знаков препинания
Ответ Создать тему
Опции темы

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