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

Разбить строку на слова, добавить эти слова в массив строк - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
01.05.2014, 15:16     Разбить строку на слова, добавить эти слова в массив строк #1
Привет всем!

Понадобилось решить одну простенькую задачку:

Разбить строку на слова, добавить эти слова в массив строк, вывести содержимое массива строк.

Попытался сделать сам,написал что-то быдлокодерское))

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 <iostream>
#include <string>
using namespace std;
 
int main() {
    setlocale(LC_ALL,"rus");
        char str[] = "Муха Варенье Сова"; 
        char strw[] = "Муха Варенье Сова"; 
 
        if(str == " " || str == ""){
            cout << "Пустой запрос!" << endl;
        }
 
        char *spcol;
        char *spw;
 
        int c = 0;
        spcol = strtok(str, ", ");
        while (spcol) {
            c = c + 1; 
            spcol = strtok(NULL, ", ");
        }
 
        char *listword[c];
        spw = strtok(strw,", ");
        while(spw){
             for(int i = 0 ; i < c; i++){
                listword[i] = spw;
             }
            spw = strtok(NULL,", ");
        }
 
        for(int a = 0; a < c; a++){
            cout << listword[a] << endl;
        }
  return 0;
}
Помогите, пожалуйста, решить задачку)

Заранее благодарю!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
01.05.2014, 15:20     Разбить строку на слова, добавить эти слова в массив строк #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nachinka Посмотреть сообщение
Разбить строку на слова, добавить эти слова в массив строк, вывести содержимое массива строк.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <iostream>
#include<vector>
#include<sstream>
#include<string>
#include<iterator>
int main()
{
    std::string str = "Is a string";
    std::stringstream s(str);
    std::vector <std::string> svec;
    for(std::string word;s>>word;svec.push_back(word));
    std::copy(svec.begin(),svec.end(),std::ostream_iterator <std::string> (std::cout,"\n"));
    return 0;
}
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
01.05.2014, 16:17  [ТС]     Разбить строку на слова, добавить эти слова в массив строк #3
Спасибо cooller!
Только вывод странноват...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <sstream>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL,"rus");
    string str = "Moscow Never Sleep";
    stringstream s(str);
    vector <string> svec;
      for(string word; s >> word; svec.push_back(word)){
        copy(svec.begin(),svec.end(),ostream_iterator <string> (cout,"\n"));
      }
 
      vector<string>::iterator cur;
      for (cur = svec.begin(); cur<svec.end(); cur++){
       cout<<*cur<<endl;
      }
  return 0;
}
пришлось добавить дополнительный вектор.

Вывод
Bash
1
2
3
4
5
6
Moscow
Moscow
Never
Moscow
Never
Sleep
Добавлено через 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
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <sstream>
 
using namespace std;
 
int main() {
  setlocale(LC_ALL,"rus");
  string str = "Moscow Never Sleep";
  stringstream s(str);
  vector <string> svec;
    for(string word; s >> word; svec.push_back(word)){
      copy(svec.begin(),svec.end(), ostream_iterator <string> (cout,"\n"));
    }
 
  unsigned int vector_size = svec.size();
  cout << "Ваш вектор." << endl;
    for (int i = 0; i < vector_size; i++) {
      cout << svec[i] << endl;
    }
  return 0;
}
Добавлено через 13 минут
Так как вывод второй для меня удобнее...

Как вот тут не выводить в консоль?

C++
1
std::copy(svec.begin(),svec.end(),std::ostream_iterator <std::string> (std::cout,"\n"));

std::cout заменить на NULL что ли?
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
01.05.2014, 16:26     Разбить строку на слова, добавить эти слова в массив строк #4
Цитата Сообщение от Nachinka Посмотреть сообщение
Как вот тут не выводить в консоль?
Код C++
1
std::copy(svec.begin(),svec.end(),std::ostream_iterator <std::string> (std::cout,"\n"));
std::cout заменить на NULL что ли?
если не нужно выводить в консоль, то нужно удалить строку полностью
Цитата Сообщение от Nachinka Посмотреть сообщение
Только вывод странноват...
расшифруй

Добавлено через 1 минуту
Цитата Сообщение от Nachinka Посмотреть сообщение
for(string word; s >> word; svec.push_back(word)){
* * * * copy(svec.begin(),svec.end(),ostream_iterator <string> (cout,"\n"));
* * * }
вывод странноват, потому что ты убрала ; после инициализации цикла, и копи каждый раз выводил на экран, а потом ты еще и вектор выводила, по этому и странноватый вывод
Nachinka
11 / 11 / 0
Регистрация: 19.02.2014
Сообщений: 95
01.05.2014, 16:28  [ТС]     Разбить строку на слова, добавить эти слова в массив строк #5
Ну просто при выводе, писалось это:
Bash
1
2
3
Moscow
Moscow
Never
А по логике вещей должно было писаться вот это:
Bash
1
2
3
Moscow
Never
Sleep
Добавлено через 46 секунд
А понятненько!
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
01.05.2014, 17:44     Разбить строку на слова, добавить эти слова в массив строк #6
Nachinka, просто использует мой код, не нужно ничего править, можете только добавить ввод строки с консоли
Yandex
Объявления
01.05.2014, 17:44     Разбить строку на слова, добавить эти слова в массив строк
Ответ Создать тему
Опции темы

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