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

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

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

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

19.04.2011, 17:09. Просмотров 563. Ответов 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)после слова могут быть разные символы и несколько пробелов. Как от этого избавлятся?

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

Вопросы от новичка. - C++
Всем доброго времени суток, уважаемые форумчане. Мне 12 лет. Собираюсь серьезно изучать C++. Пока работала в средах LogoWriter (понятие...

Вопросы от новичка по C++ - C++
1)В С++ можно делить с остатком только вещественные числа? К примеру: int a,b; float c; Если 5 поделить на 4 ,то получим 1 без...

вопросы новичка - C++
)Значение литерала 7.0Е-3 2)Логическая ошибка (ошибка реализации алгоритма) Выберите по крайней мере один ответ: пропуск ; ...

Очень тупые вопросы новичка - C++
Хочу попытаться что-нибудь спрограммировать для авиасимулятора X-plane. Там, вроде бы, используют язык C++. Но мне до изучения языка еще...

вопросы от новичка!помогите пройти тест!!! - C++
Результат работы фрагмента программы int x = 10; do { cout&lt;&lt; x &lt;&lt;&quot;\t&quot; ; x = x - 3; } while (x &gt; 0); Выберите один...

вопросы от новичка помогите прошк вас!)) - C++
)Значение литерала 7.0Е-3 2)Логическая ошибка (ошибка реализации алгоритма) Выберите по крайней мере один ответ: пропуск ; ...

2
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
1
Mr.X
Эксперт С++
3050 / 1695 / 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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2011, 11:38
Привет! Вот еще темы с ответами:

Вывод строки из вектора - C++
Как вывести на экран строку, которая находится в векторе? #include &lt;cmath&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using...

Удаление строки из вектора - C++
Доброе утро. Есть 2 вектора типа string. Подскажите как удалить найденные строки из вектора names. for (int t = 0; t &lt; temp.size();...

Как научиться создавать на C++ простые приложения (очень простые игры)? - C++
Помогите, я хочу научится создавать какието для начала очень простые игры, приложения. но я вооще ничего не знаю :wall: не знаю с чего...

Передача строки из вектора строк в функцию (исправить ошибку) - C++
Доброго все здравия, заполняю вектор строк, затем поочередно, каждая строка вектора передается в функцию. Все работает, но появляется...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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