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

решении задачи (по Липпману) - C++

Восстановить пароль Регистрация
 
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
09.07.2013, 16:18     решении задачи (по Липпману) #1
Занимаюсь по книги Стенли Липпмана "C++ Primer" (Язык программирования С++. Вводный курс). Возникла проблема с решением задачи.Текст - прочитайте некоторый текст, сохраняя каждое введенное слово как отдельный элемент вектора. Преобразуйте символы каждого слова в прописные.
Свою ошибку понимаю, но не знаю, как решить.

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
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
 
using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;
 
int main() 
{
    vector<string> vecstr;
    vector<char> vecchar;
    string line;
    
    while (cin >> line)
        vecstr.push_back(line);
    for (vector<int>::size_type iy = 0; iy < vecstr.size(); ++iy) {
        vecchar = vecstr[iy];
        for (vector<int>::size_type ia = 0; ia < vecchar.size(); ++iy)
            tolower(vecchar[ia]);
        vecstr[iy] = vecchar;
    }
    for (vector<int>::size_type ix = 0, iz = 0; ix + iz != vecstr.size(); ix += 8) {
        for (; iz != 8; ++iz) 
            if((iz + ix) < vecstr.size()) 
            cout << vecstr[iz + ix] << ' ';
        cout << endl;
    }
    system("pause");
    return 0;
}

Если убрать первый цикл for, т.е. просто написать программу для вывода текста по 8 слов в строке, то программа где-то зацикливается.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2013, 17:38     решении задачи (по Липпману) #2
У меня такое и не компилируется. И зачем вам, вообще, второй вектор? Тут одного вполне достаточно.

Добавлено через 29 минут
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
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cctype>
 
using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;
using std::stringstream;
 
int main() 
{
     vector<string> vecstr;
     string line;
 
     getline(cin, line);
     stringstream s(line);
     
     while (!s.eof())
     {
        s >> line;
        vecstr.push_back(line);
     }
        
     for (int i = 0; i < vecstr.size(); ++i)
         cout << vecstr[i] << ' ';
     cout << endl;
 
     for (int i = 0; i < vecstr.size(); ++i) 
     {
         for (int j = 0; j < vecstr[i].size(); ++j)
            vecstr[i][j] = toupper(vecstr[i][j]);
     }
     
     for (int i = 0; i < vecstr.size(); ++i)
         cout << vecstr[i] << ' ';
     cout << endl;
 
     system("pause");
     return 0;
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,712
Записей в блоге: 3
09.07.2013, 17:54     решении задачи (по Липпману) #3
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
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() 
{
    vector<string> vecstr;
    string line;
cout<<"Type number of strings finishing each of any by the ENTER key\n"
"Press Ctrl+Z and ENTER next time to break the input session, please.";    
    while (cin >> line)//Press Ctrl+Z to break it
        vecstr.push_back(line);
    for (vector<int>::size_type iy = 0; iy < vecstr.size(); ++iy) {
char ch_buf[80]={'\0'};
for(size_t ich=0; ich < vecstr[iy].size(); ++ich) ch_buf[ich]= tolower(vecstr[iy].c_str()[ich]);
string s_tmp=string(ch_buf);
vecstr[iy]=s_tmp;
           }
    for (vector<int>::size_type iy = 0; iy < vecstr.size(); ++iy)
            cout << vecstr[iy] << ' ';
        cout << endl;
      system("pause");
    return 0;
}
Опоздал.
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
09.07.2013, 22:44  [ТС]     решении задачи (по Липпману) #4
Большое спасибо. Но есть одно "но" , некоторые вещи из ваших программ в книге еще не были описаны. Т.е. нужно решить только с полученными знаниями. Если можно, укажите, пожалуйста, мои ошибки.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 00:09     решении задачи (по Липпману) #5
Цитата Сообщение от Bulat123 Посмотреть сообщение
Если можно, укажите, пожалуйста, мои ошибки.
У вас, ваш код, компилируется?

Добавлено через 9 минут
Цитата Сообщение от Bulat123 Посмотреть сообщение
Если можно, укажите, пожалуйста, мои ошибки.
Весь код - одна большая ошибка.

Добавлено через 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
30
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
 
using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;
 
int main() 
{
    vector<string> vecstr;
    string line;
    
    while (cin >> line)
        vecstr.push_back(line);
    
    for (vector<int>::size_type iy = 0; iy < vecstr.size(); ++iy) 
        for (string::size_type ia = 0; ia < vecstr[iy].size(); ++ia)
                vecstr[iy][ia] = toupper(vecstr[iy][ia]);
        
    for (vector<int>::size_type ix = 0; ix < vecstr.size(); ++ix) 
        cout << vecstr[ix] << ' ';
    cout << endl;   
    
    system("pause");
    return 0;
}
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
10.07.2013, 13:31  [ТС]     решении задачи (по Липпману) #6
Спасибо большое за помощь!
Я ступил, не полностью выложил текст задания, основная задача - в том, чтобы вывести получившуюся строку по 8 слов в строке. Как раз поэтому использовал два вектора. Сложность в этом и заключается. Если убрать первый цикл for, т.е. не менять регистр символов, а просто сделать вывод на экран исходной строки разделив ее на строки, по 8 сов в каждой, программа зацикливается.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.07.2013, 14:01     решении задачи (по Липпману) #7
Цитата Сообщение от Bulat123 Посмотреть сообщение
вывести получившуюся строку по 8 слов в строке.
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
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
 
using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;
 
int main() 
{
    vector<string> vecstr;
    string line;
    
    while (cin >> line)
        vecstr.push_back(line);
    
    for (vector<int>::size_type iy = 0; iy < vecstr.size(); ++iy) 
        for (string::size_type ia = 0; ia < vecstr[iy].size(); ++ia)
                vecstr[iy][ia] = toupper(vecstr[iy][ia]);
    
    
    for (vector<int>::size_type ix = 0; ix < vecstr.size(); ix += 8)
    {
        for (int i = ix; i < ix + 8 && i < vecstr.size(); ++i)
            cout << vecstr[i] << ' ';
        cout << endl;
    }
    
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Bulat123 Посмотреть сообщение
Как раз поэтому использовал два вектора.
Второй вектор здесь ни к чему. И на вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
У вас, ваш код, компилируется?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 16:36     решении задачи (по Липпману)
Еще ссылки по теме:

Алгоритм имитации отжига при решении задачи размещения электронных схем C++
Найти ошибку в решении задачи "Шифровка" (acmp) C++
C++ результат не верный при решении задачи

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

Или воспользуйтесь поиском по форуму:
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
10.07.2013, 16:36  [ТС]     решении задачи (по Липпману) #8
alsav22, большое спасибо! Нет, конечно, не компилируется. Проблема в строке vecstr[iy] = vecchar; , знаю, из-за чего, но решить не мог
Yandex
Объявления
10.07.2013, 16:36     решении задачи (по Липпману)
Ответ Создать тему
Опции темы

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