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

Задача по векторам №2 - C++

Восстановить пароль Регистрация
 
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.07.2013, 18:50     Задача по векторам №2 #1
Задача: Прочитайте некоторый текст, сохраняя каждое введенное слово как отдельный элемент вектора. Преобразуйте символы каждого слова в прописные. Отобразите преобразованные элементы вектора, выводя по восемь в строке.

Преобразовать и вывести преобразованные элементы вектора получилось. Но вот вывести их по 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
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
template <class T>
void show (vector<T> & x)
{
    for (vector<T>::iterator it = x.begin() ; it != x.end() ; ++it)
                cout<<" "<<*it;
}
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    string words;
    string word;
    vector<string> some_text;
    vector<string> s_t;
    
    cout << "Введите текст. По окончанию ввода, нажмите - ctrl + Z" << endl;
 
    while (getline(cin, words))
    {
        some_text.push_back(words);
        word = words;
    }
 
    for (string::size_type ix = 0; ix != word.size(); ++ix)
    {
        word[ix] = toupper(word[ix]);
    }
 
    s_t.push_back(word);
    cout << endl;
 
    show(some_text);
    cout << endl;
    cout << endl;
    show(s_t);
    cout << endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
31.07.2013, 19:04     Задача по векторам №2 #2
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
C++
1
2
[CPP]for (vector<T>::iterator it = x.begin() ; it != x.end() ; ++it)
   cout<<" "<<*it;
[/CPP]
C++
1
2
3
4
5
6
for (vector<T>::iterator it = x.begin(); it != x.end(); ) {
   for (size_t i = 0; (i != 8) && (it != x.end()); ++i, ++it) {
      cout << *it << ' ';
   }
   cout << endl;
}
?

Добавлено через 7 минут
upd:
C++
1
2
3
4
5
6
7
8
9
template<typename T>
void show(vector<T> const& x) {
   for (typename vector<T>::const_iterator it = x.begin(); it != x.end(); ) {
      for (size_t i = 0; (i != 8) && (it != x.end()); ++i, ++it) {
         cout << *it << ' ';
      }
      cout << endl;
   }
}
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.07.2013, 19:11  [ТС]     Задача по векторам №2 #3
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
template<typename T>
void show(vector<T> const& x) {
   for (typename vector<T>::const_iterator it = x.begin(); it != x.end(); ) {
      for (size_t i = 0; (i != 8) && (it != x.end()); ++i, ++it) {
         cout << *it << ' ';
      }
      cout << endl;
   }
}
Спасибо. А куда вставить символ переноса на новую строку, чтобы при достижении 8 элемента вектора, вывод переносился на новую строку, а то сейчас они по прежнему выводятся в одну строку.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
31.07.2013, 19:13     Задача по векторам №2 #4
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
куда вставить символ переноса на новую строку, чтобы при достижении 8 элемента вектора, вывод переносился на новую строку
да вроде всё переводится: http://ideone.com/FngntW
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.07.2013, 19:20  [ТС]     Задача по векторам №2 #5
Цитата Сообщение от gray_fox Посмотреть сообщение
да вроде всё переводится:
вот что выводиться у меня. может это из-за того что у меня считывается строка а не целые числа. И скорее всего она считается одним элементом, а не восемью как хотелось бы.
Миниатюры
Задача по векторам №2  
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
31.07.2013, 19:32     Задача по векторам №2 #6
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
может это из-за того что у меня считывается строка
да, вместо
C++
1
2
3
4
5
6
7
8
9
10
11
while (getline(cin, words))
{
    some_text.push_back(words);
    word = words;
}
 
 
for (string::size_type ix = 0; ix != word.size(); ++ix)
{
    word[ix] = toupper(word[ix]);
}
попробуй
C++
1
2
3
4
5
6
7
8
9
for (string some_word; cin >> some_word; ) {
   some_words.push_back(some_word);
}
 
for (size_t i = 0; i != some_words.size(); ++i) {
   for (size_t j = 0; j != some_words[i].size(); ++j) {
      some_words[i][j] = ::toupper(some_words[i][j]);
   }
}
Добавлено через 2 минуты
либо
C++
1
2
3
4
5
6
7
8
9
10
#include <iterator>
#include <algorithm>
 
// ...
 
vector<string> some_words((istream_iterator<string>(cin)), istream_iterator<string>());
 
for (size_t i = 0; i != some_words.size(); ++i) {
   transform(some_words[i].begin(), some_words[i].end(), some_words[i].begin(), ::toupper);
}
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.07.2013, 19:51  [ТС]     Задача по векторам №2 #7
Цитата Сообщение от gray_fox Посмотреть сообщение
да, вместо

попробуй
C++
1
2
3
4
5
6
7
8
9
for (string some_word; cin >> some_word; ) {
   some_words.push_back(some_word);
}
 
for (size_t i = 0; i != some_words.size(); ++i) {
   for (size_t j = 0; j != some_words[i].size(); ++j) {
      some_words[i][j] = ::toupper(some_words[i][j]);
   }
}
Спасибо, это помогло.

Добавлено через 4 минуты
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
some_words[i][j] = ::toupper(some_words[i][j]);
Скажите, а в этой строке, как работает "::"? Ведь там не указано пространство имен к которому оно принадлежит.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
31.07.2013, 19:56     Задача по векторам №2 #8
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
как работает "::"?
:: явно указывает глобальное пространсто имён. Можно без и этого...

Добавлено через 3 минуты
В принципе можно даже так писать
C++
1
::std::vector<::std::string> some_words;
)
Аццкий Прогер
21 / 10 / 4
Регистрация: 07.01.2013
Сообщений: 220
31.07.2013, 21:21  [ТС]     Задача по векторам №2 #9


ок, запомню )))
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.07.2013, 22:41     Задача по векторам №2 #10
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 <cctype>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
 
void up_case(std::string& s)
{
    std::transform(s.begin(), s.end(),
        s.begin(), ::toupper);
}
 
void print(std::vector<std::string>& v, int items_per_line)
{
    int n = 0;        
    for(std::size_t i = 0; i < v.size(); ++i)
    {        
        if(n == items_per_line)
        {
            n = 0;
            std::cout << '\n';
        }
                    
        std::cout << v[i] << ' ';
        ++n;
    }
 
    std::cout << '\n';
}
 
int main() 
{    
    std::vector<std::string> v;
    
    for(std::string s;
        std::cin >> s; )
    {
        v.push_back(s);
        up_case(v.back());
    }
    
    const int items_per_line = 8;    
    print(v, items_per_line);
}
Yandex
Объявления
31.07.2013, 22:41     Задача по векторам №2
Ответ Создать тему
Опции темы

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