Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Entrery
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
#1

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

13.12.2012, 15:58. Просмотров 765. Ответов 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++):

Как разбить строку
Как прочитать такую строку за один раз? Ukraine Kiev Donetsk Odessa и как...

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

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

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

Как разбить строку на массив слов?
Надо разбить строку на массив строк при помощи разделителя... Какой функцией...

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

6
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.12.2012, 16:04 #2
Я думаю strtok для вас подойдет: http://www.cplusplus.com/reference/cstring/strtok/
1
MrCold
859 / 757 / 174
Регистрация: 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;
2
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
1441 / 778 / 257
Регистрация: 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;
}
2
13.12.2012, 19:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 19:24
Привет! Вот еще темы с решениями:

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

Как разбить строку на вектор из строк?
Здравствуйте. Хочу написать программу, которая текст преобразует в...

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

Strtok как разбить строку пополам по первому пробелу?
Есть вот такая строка: 28 -1.221636 -1.183837 32.839973 0.885457 -0.348518...


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

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

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