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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
#1

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

09.07.2013, 16:18. Просмотров 548. Ответов 7
Метки нет (Все метки)

Занимаюсь по книги Стенли Липпмана "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 слов в строке, то программа где-то зацикливается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 16:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос решении задачи (по Липпману) (C++):

найти ошибку в решении задачи! - C++
Условие: Дано натуральное число n. Вычислить: 1 + 2 + 4 + 8 + … + 2n. не могу понять,как в цикле фо задать так,что бы в формуле...

ACCESS_VIOLATION при решении задачи - C++
Здравствуйте!Тут решал одну простую задачу, но на dl.gsu.by она не проходит последний тест:не пройден 10-й тест. Решение вызвало ошибку...

О решении задачи и о разнице между . + 1 и .++ - C++
Решаю я задачу: Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих...

Ошибки компиляции в решении задачи с векторами - C++
#include&lt;iostream&gt; using namespace std; class Vector{ public: int x1,y1,x2,y2,x3,y3; int addition(){ x3=x1+x2; ...

результат не верный при решении задачи - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #include &lt;stdio.h&gt; #include...

Посодействуйте в решении задачи пожалуйста! Вроде бы написал, но не могли бы вы проверить правильность? - C++
ЗАДАЧА: Вычислить значение суммы бесконечного ряда с заданной точностью (e=10-6):...

7
alsav22
5421 / 4816 / 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;
}
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,645
Записей в блоге: 5
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;
}
Опоздал.
1
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
09.07.2013, 22:44  [ТС] #4
Большое спасибо. Но есть одно "но" , некоторые вещи из ваших программ в книге еще не были описаны. Т.е. нужно решить только с полученными знаниями. Если можно, укажите, пожалуйста, мои ошибки.
0
alsav22
5421 / 4816 / 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;
}
2
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
10.07.2013, 13:31  [ТС] #6
Спасибо большое за помощь!
Я ступил, не полностью выложил текст задания, основная задача - в том, чтобы вывести получившуюся строку по 8 слов в строке. Как раз поэтому использовал два вектора. Сложность в этом и заключается. Если убрать первый цикл for, т.е. не менять регистр символов, а просто сделать вывод на экран исходной строки разделив ее на строки, по 8 сов в каждой, программа зацикливается.
0
alsav22
5421 / 4816 / 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 Посмотреть сообщение
У вас, ваш код, компилируется?
0
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
10.07.2013, 16:36  [ТС] #8
alsav22, большое спасибо! Нет, конечно, не компилируется. Проблема в строке vecstr[iy] = vecchar; , знаю, из-за чего, но решить не мог
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 16:36
Привет! Вот еще темы с ответами:

Алгоритм имитации отжига при решении задачи размещения электронных схем - C++
Подгоните примерчик пожалуйста на такую тему для саморазбора

Найти ошибку в решении задачи "Шифровка" (acmp) - C++
#include &lt;stdio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; #include...

Почему происходит ошибка времени выполнения в решении задачи "Ход конем"? - C++
Добрый день! Я попытался решить одну задачку о шахматах. Проблема в том, что моя программа крашится с такой ошибкой: ...

Ошибка в решении задачи "Судоку" (acmp) - C++
Здравствуйте. Моё решение: #include &lt;stdio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
10.07.2013, 16:36
Ответ Создать тему
Опции темы

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