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

Строки и файлы - C++

Восстановить пароль Регистрация
 
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
05.11.2012, 01:21     Строки и файлы #1
Добрый день. Прошу у вас помощи в данной теме. Сколько не кручу все никак не получается. Пробовал поиск и вроде бы нашел похожую программу, но она была написана как-то закручено. Собственно прошу помощи.

Задание 2
Дана строка текста, в которой слова разделены пробелами и запятыми. Необходимо:


а) вывести каждое четное слово.

Строку инициализировать в коде программы:

So she was considering in her own mind, as well as she could, for the hot day made her feel very sleepy and stupid, whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.


Задание 3

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

Текстовый файл создать в блокноте. Концом предложения считать символы '.', '!', '?'.



Заранее большое спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 01:21     Строки и файлы
Посмотрите здесь:

Строки и файлы C++
Строки и файлы C++
строки, файлы C++
Файлы и строки C++
строки и файлы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 06:46     Строки и файлы #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
30
31
32
#include <iostream>
#include <string>
using namespace std;
 
int main()
{   
    string str = "So she was considering in her own mind, as well as she could," 
                 "for the hot day made her feel very sleepy and stupid, whether"
                 " the pleasure of making a daisy-chain would be worth the trouble"
                 " of getting up and picking the daisies, when suddenly a White Rabbit"
                 " with pink eyes ran close by her.";
 
    cout << str << endl << endl;
    
    for (int i = 0; i < str.size(); i++)
    {
        while (i < str.size() && str[i] != ' ')
                    i++;
        
        i++;
        while (i < str.size() && str[i] != ' ' && str[i] != ',' && str[i] != '.')
        {
            cout << str[i];
            i++;
        }
        if (i < str.size()) cout << ' '; 
    }
    
    cout << endl;
    system("pause");
    return 0;
}
Цитата Сообщение от Flashik66 Посмотреть сообщение
и записывает их в новый файл в обратном порядке.
То есть, сначала третье, потом второе и первое?
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
int main()
{   
    ifstream fin("in_file.txt", ios::binary);
    ofstream fout("out_file.txt");
    
    if (!fin.is_open() || !fout.is_open())
        cout << "Error!" << endl;
    else // чтение предложений из файла
    {
        vector <string> v; // вектор для предложений
        char ch;
        string str; // строка для предложения
        
        while (fin.peek() == ' ') // пропускаем пробелы до первого предложения
                    fin.seekg(1, ios::cur);
        
        while (true)
        {
            fin.get(ch);
            if (fin.eof()) break;
            str.push_back(ch);
            if (ch == '.' || ch == '!' || ch == '?') // если конец предложения
            {
                v.push_back(str); // предложение в вектор
                str.clear();
                while (fin.peek() == ' ') // пропускаем пробелы между предложениями
                    fin.seekg(1, ios::cur);
            }
        }
        fin.close();
 
        for (auto i = v.rbegin(); i != v.rend(); i++) // запись предложений в обратном порядке в файл
        {
            fout << *i;
            if (i != (v.rend() - 1)) fout << ' ';
        }
        fout.close();
    }
    
    system("pause");
    return 0;
}
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
05.11.2012, 13:17  [ТС]     Строки и файлы #3
Спасибо огромное. Приду домой буду разбираться что к чему!
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.11.2012, 13:42     Строки и файлы #4
а препод вас ругать не будет за использование класса string?
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
05.11.2012, 23:00  [ТС]     Строки и файлы #5
не будет)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.11.2012, 23:04     Строки и файлы #6
Цитата Сообщение от alsav22 Посмотреть сообщение
vector <string> v; // вектор для предложений
Напрашивается std::stack.
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
07.11.2012, 02:38  [ТС]     Строки и файлы #7
К третьему заданию выдает ошибки при компиляции. В чем прикол?

Cpp1.cpp
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(29) : error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(33) : error C2039: 'clear' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(40) : error C2440: 'initializing' : cannot convert from 'class std::reverse_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,class std::basic_string<char,stru
ct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,int>' to 'int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(40) : error C2677: binary '!=' : no global operator defined which takes type 'class std::reverse_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,class std::b
asic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<cha
r> > *,int>' (or there is no acceptable conversion)
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(42) : error C2100: illegal indirection
E:\ó÷åáà\Ëàáû\Ëàáû C++\Ëàá 5\63\Cpp1.cpp(43) : error C2677: binary '!=' : no global operator defined which takes type 'class std::reverse_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,class std::b
asic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<cha
r> > *,int>' (or there is no acceptable conversion)
Error executing cl.exe.

Cpp1.obj - 6 error(s), 0 warning(s)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.11.2012, 09:03     Строки и файлы #8
Среда какая?

Добавлено через 11 минут
Так попробуйте. На двух компиляторах без ошибок:
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <cstdlib>
using namespace std;
 
int main()
{
    ifstream fin("in_file.txt", ios::binary);
    ofstream fout("out_file.txt");
 
    if (!fin.is_open() || !fout.is_open())
        cout << "Error!" << endl;
    else // чтение предложений из файла
    {
        vector <string> v; // вектор для предложений
        char ch;
        string str; // строка для предложения
 
        while (fin.peek() == ' ') // пропускаем пробелы до первого предложения
                    fin.seekg(1, ios::cur);
 
        while (true)
        {
            fin.get(ch);
            if (fin.eof()) break;
            str.push_back(ch);
            if (ch == '.' || ch == '!' || ch == '?') // если конец предложения
            {
                v.push_back(str); // предложение в вектор
                str.clear();
                while (fin.peek() == ' ') // пропускаем пробелы между предложениями
                    fin.seekg(1, ios::cur);
            }
        }
        fin.close();
 
        vector <string>::reverse_iterator i;
        for ( i = v.rbegin(); i != v.rend(); i++) // запись предложений в обратном порядке в файл
        {
            fout << *i;
            if (i != (v.rend() - 1)) fout << ' ';
        }
        fout.close();
    }
 
    system("pause");
    return 0;
}
Добавлено через 20 минут
Если через стек, то так можно:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#include <iterator>
using namespace std;
 
int main()
{
    ifstream fin("in_file.txt", ios::binary);
    ofstream fout("out_file.txt");
 
    if (!fin.is_open() || !fout.is_open())
        cout << "Error!" << endl;
    else // чтение предложений из файла
    {
        stack <string> s; // стек для предложений
        char ch;
        string str; // строка для предложения
 
        while (fin.peek() == ' ') // пропускаем пробелы до первого предложения
                    fin.seekg(1, ios::cur);
 
        while (true)
        {
            fin.get(ch);
            if (fin.eof()) break;
            str.push_back(ch);
            if (ch == '.' || ch == '!' || ch == '?') // если конец предложения
            {
                s.push(str); // предложение в стек
                str.clear();
                while (fin.peek() == ' ') // пропускаем пробелы между предложениями
                    fin.seekg(1, ios::cur);
            }
        }
        fin.close();
        
        int j = s.size();
        for ( int i = 0; i < j; i++) // запись предложений в обратном порядке в файл
        {
            fout << s.top();
            s.pop();
            if (i != j - 1) fout << ' ';
        }
        fout.close();
    }
 
    system("pause");
    return 0;
}
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
07.11.2012, 14:41  [ТС]     Строки и файлы #9
среда 6,0 уже две ошибки! Вот
error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'
e:\ó÷åáà\ëàáû\ëàáû c++\ëàá 5\63\cpp1.cpp(32) : error C2039: 'clear' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >'

Добавлено через 9 минут
Запустил через другой компилятор и вроде собралось. Но программа не работает. При запуске в консоле пишет Error.. Как лечить?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.11.2012, 17:43     Строки и файлы #10
Цитата Сообщение от Flashik66 Посмотреть сообщение
среда 6,0
Студия 6 или что?

Цитата Сообщение от Flashik66 Посмотреть сообщение
Запустил через другой компилятор
Какой другой?

Цитата Сообщение от Flashik66 Посмотреть сообщение
При запуске в консоле пишет Error.. Как лечить?
Файла, где предложения должны быть нет, вот и "Error!". Файл в нужное место положите.
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
08.11.2012, 01:47  [ТС]     Строки и файлы #11
да-да студия 6. Вы только не злитесь я дуб еще. Файл нужно положить в папку debug?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.11.2012, 02:03     Строки и файлы #12

Не по теме:

Никто и не думал злиться.

У меня (студия 2010) в папку с проектом.

Добавлено через 4 минуты
Этот "Error!" в коде сделан для проверки открытия файлов. Если не находится файл для записи (если находится, то данные стираются), то он создаётся, тут ошибки редко бывают. А файл, открываемый для чтения, должен существовать, иначе ошибка открытия.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 02:49     Строки и файлы
Еще ссылки по теме:

Строки и файлы C++
Строки и файлы C++
C++ Строки и файлы

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

Или воспользуйтесь поиском по форуму:
Flashik66
15 / 7 / 7
Регистрация: 05.11.2012
Сообщений: 119
08.11.2012, 02:49  [ТС]     Строки и файлы #13
Блин у меня не получается. Если ложить в папку с проектом то ничего не происходит. Если ложить в debug то ничего не происходит но и Error не пишет. Можете прописать путь куда ложить и как назвать файл? Мб я что-то не так делаю..

Добавлено через 7 минут
Ой я дурак. Извини я все понял. Еще раз извини и спасибо огромное за помощь! Спасибо!!!
Yandex
Объявления
08.11.2012, 02:49     Строки и файлы
Ответ Создать тему
Опции темы

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