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

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

Войти
Регистрация
Восстановить пароль
 
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
#1

Вектора и строки (простые вопросы новичка) - C++

19.04.2011, 17:09. Просмотров 533. Ответов 2
Метки нет (Все метки)

#include <vector>
vector <string> A;
1)я не задаю кол-во строк вектора А, чем это чревато?
2)как мне вывести такой вектор,обычно я вывожу с помощью цикла, но я не знаю кол-во строк?
3)как происходит сравнение строк? как можно сравнивать буквы?
4)мне надо строку разбить на слова и занести в вектор. я кручу цикл и смотрю есть ли пробел. почти уверен есть более рациональный метод. подскажите плиз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector <string> create (string s1)
{
    vector <string> A;
    string k;
    int nachalo_novogo_slova = 0;
    for ( int i=0 ; i < s1.length() ; i++)
    {
        if (s1[i]==' ')
        {
            k.assign( s1, nachalo_novogo_slova, i-1 );
            A.push_back (k);
            k.clear();
            nachalo_novogo_slova = i+1;
        }
    }
    return A;
}
5)после слова могут быть разные символы и несколько пробелов. Как от этого избавлятся?

Заранее благодарствую.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 17:09     Вектора и строки (простые вопросы новичка)
Посмотрите здесь:

Очень тупые вопросы новичка C++
C++ вопросы новичка
C++ вопросы от новичка помогите прошк вас!))
C++ Вопросы от новичка по C++
C++ вопросы от новичка!помогите пройти тест!!!
C++ Вопросы от новичка.
Дан список, элементы которого являются координатами вектора. Найти длину вектора C++
C++ Поменять местами заданные в диалоге строки матрицы (многомерного вектора)
Как научиться создавать на C++ простые приложения (очень простые игры)? C++
Удаление строки из вектора C++
Сдвинуть элементы массива циклически на M влево, перевернуть нечетные строки и посчитать простые числа C++
C++ Передача строки из вектора строк в функцию (исправить ошибку)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2844 / 1781 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.04.2011, 19:02     Вектора и строки (простые вопросы новичка) #2
Цитата Сообщение от fenix117 Посмотреть сообщение
1)я не задаю кол-во строк вектора А, чем это чревато?
Нельзя будет юзать оператор [] для ввода елементов, то бишь такая запись не корректна
C++
1
2
3
std::vector<int> a;
for(int i = 0; i < 10; ++i)
  std::cin >> a[i];
Цитата Сообщение от fenix117 Посмотреть сообщение
2)как мне вывести такой вектор,обычно я вывожу с помощью цикла, но я не знаю кол-во строк?
a.size() - это и будет количество елементов.
Цитата Сообщение от fenix117 Посмотреть сообщение
3)как происходит сравнение строк?
Здесь посмтори одну из реализаций функции strcmp().
Цитата Сообщение от fenix117 Посмотреть сообщение
как можно сравнивать буквы?
Операторами: < != > и тд.
Цитата Сообщение от fenix117 Посмотреть сообщение
4)мне надо строку разбить на слова и занести в вектор. я кручу цикл и смотрю есть ли пробел. почти уверен есть более рациональный метод. подскажите плиз.
C++
1
2
3
4
5
#include <sstream>
//...
std::istringstream ist(str);
while(ist >> str)
  a.push_back(str);
При условие, что разделителями являються пробелы.
Цитата Сообщение от fenix117 Посмотреть сообщение
5)после слова могут быть разные символы и несколько пробелов. Как от этого избавлятся?
Можно зделать как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>
#include <cctype>
 
int main(){
  std::string str("bla,   wtf? fjas."), tmp;
  std::vector<std::string> a;
  std::replace_if(str.begin(), str.end(), ispunct, ' ');//Заменяем знаки пунктуцации на пробелы
  std::istringstream ist(str);
  while(ist >> tmp)
    a.push_back(tmp);
  for(size_t i = 0; i < a.size(); ++i)
    std::cout << a[i] << ' ';
  return 0;
}
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
20.04.2011, 11:38     Вектора и строки (простые вопросы новичка) #3
Цитата Сообщение от fenix117 Посмотреть сообщение
я кручу цикл и смотрю есть ли пробел. почти уверен есть более рациональный метод
И этот метод состоит в использовании алгоритмов (они заменяют циклы):
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::vector<T_str>  T_strings;
/////////////////////////////////////////////////////////////////////////////////////////
T_strings  get_strings_vector(const T_str&  s)
{
    T_strings  res;
    std::istringstream  ssin(s);
    std::copy( std::istream_iterator<T_str>(ssin), 
               std::istream_iterator<T_str>(),
               std::back_inserter(res) );
 
    return  res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));   
    std::cout << "Введите строку слов на латинице, "
                 "разделенных различными пробельными символами: "
              << std::endl;
 
    T_str  s;
    getline(std::cin, s);
 
    T_strings  strings = get_strings_vector(s);
    std::copy(strings.begin(), strings.end(), 
              std::ostream_iterator<T_str>(std::cout, "\n"));
    std::cout << std::endl;
}
Yandex
Объявления
20.04.2011, 11:38     Вектора и строки (простые вопросы новичка)
Ответ Создать тему
Опции темы

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