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

Как разбить строку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.10.2013, 19:11     Как разбить строку #1
Как прочитать такую строку за один раз?

Ukraine Kiev Donetsk Odessa
и как мне строку разбить на слова и добавить в вектор.

string s
cin>>s;
до пробела только(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
04.10.2013, 19:21     Как разбить строку #2
http://www.cplusplus.com/reference/s...tring/getline/

Добавлено через 8 минут
для того, чтобы потом строку разбить на подстроки разделенные пробелами можно использовать потоки строк std::istringstream
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    string s;
    std::getline(cin,s);
    cout << s;
 
    std::stringstream ss;
    ss.str(s);
 
    string s2;
    vector<string> vs;
    while(ss>>s2) vs.push_back(s2);
    
    cout << endl;
 
    for(int i=0; i<vs.size(); i++)
        cout << vs[i] << endl;
я привык использовать std::stringstream так как им можно пользоваться как для ввода так и для вывода
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.10.2013, 19:33  [ТС]     Как разбить строку #3
спасибо, сейчас попробую сделать)
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
04.10.2013, 19:35     Как разбить строку #4
Цитата Сообщение от BabyGluk Посмотреть сообщение
спасибо, сейчас попробую сделать)
забыл,
потоки строк
C++
1
#include <sstream>
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.10.2013, 20:32  [ТС]     Как разбить строку #5
Посмотрите пожалуйста, что не так?
Должно быть так:
Ввод
2
ua kiev odessa
ru piter moskow
(у меня должен получится такой мап <kiev,ua><odessa,ua><piter,ru><moskow,ru>
3
piter
moskow
odessa

вывод
ru
ru
ua

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
// K.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<map>
 
using namespace std;
int main(int argc, char* argv[])
{
    string str,word;
    map<string,string> map;
    int main = 0;
    int i = 0;
    vector<string> vs;
    int n = 0;
    cin>>n;
    for(int k = 0; k<=n;k++){
    getline (cin,str);
    stringstream ss;
    ss.str(str);
    while(ss>>word) vs.push_back(word);
    int size = vs.size();
    for(i = 1;i<size;i++)
        map[vs[i]] = vs[main];
        main = size;
        i = main+1;
    }
    int c;
    cin>>c;
    for(int k = 0;k<c;k++){
        cin>>str;
        cout<<map[str]<<endl;
    }
  system("pause");
 
    return 0;
}
Добавлено через 35 минут
Исправил.
Может кому нужно будет.
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
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<map>
 
using namespace std;
int main(int argc, char* argv[])
{
    string str,word;
    map<string,string> map;
    int main = 0;
    int i = 0;
    vector<string> vs;
    int n = 0;
    cin>>n;
    for(int k = 0; k<=n;k++){
 
    getline (cin,str);
    stringstream ss;
    ss.str(str);
    while(ss>>word) vs.push_back(word);
    int size = vs.size();
    while(i<size){
        map[vs[i]] = vs[main];
        i++;
    }
    main = size;
    i = main+1;
        
    
    }
    int c;
    string s;
    cin>>c;
    for(int k = 0;k<c;k++){
        cin>>s;
        cout<<map[s]<<endl;
    }
    return 0;
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
04.10.2013, 21:03     Как разбить строку #6
Только я не понимаю, зачем вообще stringstream тут. >> до пробела считывает - так тут же как раз так и надо.
BabyGluk
26 / 26 / 4
Регистрация: 10.04.2013
Сообщений: 167
04.10.2013, 22:42  [ТС]     Как разбить строку #7
как правильно цикл задать?
потому что кол ввода не указываеться)
что то типа
C++
1
while(cin>>str)
но я думаю так не прокатит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 02:04     Как разбить строку
Еще ссылки по теме:

Подскажите пожалуйста как разбить строку на массив слов? C++
Как разбить строку на предложения C++
C++ Как разбить строку на символы?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2013, 02:04     Как разбить строку #8
Цитата Сообщение от BabyGluk Посмотреть сообщение
но я думаю так не прокатит.
Прокатит.
Yandex
Объявления
05.10.2013, 02:04     Как разбить строку
Ответ Создать тему
Опции темы

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