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

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

Войти
Регистрация
Восстановить пароль
 
Entrery
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
#1

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

13.12.2012, 15:58. Просмотров 683. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Как извлечь из вводимой строки только символы? К примеру, вводим " asd sss 12", а на выходе получаем asd, sss и 12? Ввод организовал таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <cstring.h>
using std::cin;
#pragma hdrstop
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{ clrscr;
string line;
getline(cin, line);
getch();
}
//---------------------------------------------------------------------------

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

Как разбить строку - C++
Как прочитать такую строку за один раз? Ukraine Kiev Donetsk Odessa и как мне строку разбить на слова и добавить в вектор. ...

Как разбить строку на предложения - C++
Как разбить строку на предложения

Как разбить строку на символы? - C++
Кто подскажет начинающему Как разбить строку на символы, имеется ввиду разбить слова на буквы

Как разбить строку в МFC? - C++
Такая ситуация (в продолжении темы о базе(кто читал)) Имеется строка в txt файле с разделителями. Например: ...

Как считать строку и разбить ее на слова? - C++
Задача на С. (стандарт) Необходимо считать строку и разбить ее на слова (слова разделены пробелами (не меннее одного)). Количество слов и...

Как разбить строку на вектор из строк? - C++
Здравствуйте. Хочу написать программу, которая текст преобразует в вектор,каждый элемент которого-отдельное слово. Создаю два объекта...

6
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.12.2012, 16:04 #2
Я думаю strtok для вас подойдет: http://www.cplusplus.com/reference/cstring/strtok/
1
MrCold
856 / 754 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
13.12.2012, 16:11 #3
Цитата Сообщение от Entrery Посмотреть сообщение
string line;
Тогда уж stringstream
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <sstream>
 
//
 
 
int main()
{
    std::string s = "asd sss 12";
    std::string str1;
    std::string str2;
    int iVal = 0;
    std::stringstream ss(s);
    ss >> str1 >> str2 >> iVal;
1
Entrery
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
13.12.2012, 18:53  [ТС] #4
Цитата Сообщение от yuron_477 Посмотреть сообщение
Я думаю strtok для вас подойдет: http://www.cplusplus.com/reference/cstring/strtok/
Она подошла, но у меня никак получается организовать с ней ввод.

В этом примере все хорошо работает (с готовой строкой):
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <cstring.h>
using std::cin;
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
char *string = "a string,of, ,tokens";
char *token;
token = strtok(string,",");
printf ("%s\n",token);
getch();
}
//---------------------------------------------------------------------------

Когда же пытаюсь сделать ввести ее, то возникает ошибка:
Кликните здесь для просмотра всего текста
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 <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <cstring.h>
using std::cin;
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
string line;
getline(cin, line);
char *string = line; //строка с ошибкой (просто добавление .c_str() не помогло)
char *token;
token = strtok(string,",");
printf ("%s\n",token);
getch();
}
//---------------------------------------------------------------------------
[C++ Error] Unit1.cpp(18): E2034 Cannot convert '_STL::string' to 'char *'

Поискал в интернете, как исправить, появились 2 новые, но в другом месте:
Кликните здесь для просмотра всего текста
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 <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <cstring.h>
using std::cin;
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
string line;
getline(cin, line);
const char *string = line.c_str();
const char *token;
token = strtok(string,","); //строка с ошибкой
printf ("%s\n",token);
getch();
}
//---------------------------------------------------------------------------
[C++ Error] Unit1.cpp(20): E2034 Cannot convert 'const char *' to 'char *'
[C++ Error] Unit1.cpp(20): E2342 Type mismatch in parameter '__s1' (wanted 'char *', got 'const char *')
[C++ Warning] Unit1.cpp(23): W8004 'string' is assigned a value that is never used

Не пойму, что там не так(
0
sovaz1997
13.12.2012, 18:55
  #5

Не по теме:

Легко: кинуть строчку... и разобьется

0
Entrery
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
13.12.2012, 19:00  [ТС] #6
Цитата Сообщение от MrCold Посмотреть сообщение
Тогда уж stringstream
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <sstream>
 
//
 
 
int main()
{
    std::string s = "asd sss 12";
    std::string str1;
    std::string str2;
    int iVal = 0;
    std::stringstream ss(s);
    ss >> str1 >> str2 >> iVal;
А вот Ваш совет мне прекрасно подошел! Спасибо)
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.12.2012, 19:24 #7
Тогда уж лучше прям в массив слова пихать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <sstream>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::vector<std::string> vs((std::istream_iterator<std::string>(ist)),
        std::istream_iterator<std::string>());
    
    system("pause");
    return 0;
}
1
13.12.2012, 19:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 19:24
Привет! Вот еще темы с ответами:

Как разбить строку по нескольким делиметрам - C++
есть строка char *a = &quot;123497, 56783; 09872!, 65443; ;221345, 623789 &quot;; разделители char keys = &quot;, !;.&quot;; нужно выделить слова ...

Strtok как разбить строку пополам по первому пробелу? - C++
Есть вот такая строка: 28 -1.221636 -1.183837 32.839973 0.885457 -0.348518 -0.307412 0.357200 0.834200 Мне нужно заменить первое...

Подскажите пожалуйста как разбить строку на массив слов? - C++
Надо разбить строку на массив строк при помощи разделителя... Какой функцией для этого надо восьпользоваться?

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


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

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

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