Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
Leew
1 / 1 / 1
Регистрация: 12.10.2012
Сообщений: 29
#1

Как взять символы из строки до пробела? - C++

09.01.2013, 17:54. Просмотров 6304. Ответов 16
Метки нет (Все метки)

Помогите разобраться. Есть строка символов типа string, допустим:
C++
1
string s="Hello World!";
Нужно взять из строки все символы от начала до пробела, и записать в другую переменную. Как это сделать?

http://www.cyberforum.ru/cpp-beginners/thread718620.html

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

Написать программу, удаляющую символы пробела в файле
Написать пррограмму на С++, где Символьный файл содержит пробелы. Сжать этот...

Определить, содержит ли текст символы, отличные от букв и пробела
Нужна помощь... Составить программу, которая позволяла бы в тексте,...

В строке удалить все символы находящиеся после пробела
Есть строки которые вводятся с файла в формате: dasdasdasd 41 asggasgasgas 65...

Как обрезать эффективно часть строки, составляющую последние символы "/" и следующие за ними символы?
здравствуйте, есть код, обрезающий во входной строке часть составляющую...

Аргументы командной строки: как программа корректно определяет два пробела в значении аргумента?
Друзья! Есть сторонняя консольная программа, к ней параметром идут имена двух...

16
zener
22 / 9 / 2
Регистрация: 16.10.2010
Сообщений: 115
09.01.2013, 18:04 #2
Псевдокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* s="Hello World!";
char* s1[40];
int i;
for (i=0;i<strlen(s);i++)
{
    s1[i]=s[i];
    if (s[i]==' ')
    {
         break;
    }
}
for (int j=0;j<i;j++)
{
    cout<<s1[j]<<" ";
}
cout<<endl;
Добавлено через 3 минуты
или как вариант использовать динамическую память:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char* s="Hello World!";
int k;
for (int i=0;i<strlen(s);i++)
{
    k=i;
    if (s[i]==' ')
    {
         break;
    }
}
char* s1=new char* [k];
for (int i=0;i<k;i++)
{
   s1[i]=s[i];
}
for (int i=0;i<k;i++)
{
    cout<<s1[j]<<" ";
}
cout<<endl;
delete [] s1;
1
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
09.01.2013, 18:07 #3
C++
1
2
size_t n = s.find(' ');
string s2 = (n != string::npos) ? s.substr(0, n) : "";
1
extenup
54 / 54 / 13
Регистрация: 12.11.2011
Сообщений: 109
09.01.2013, 18:07 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    string s1 = "Hello World!!!";
    string s2 = s1.substr(0, s1.find(' '));
 
    cout << s2;
    return 0;
}
rangerx правильнее написал.. надо убедиться что в строке есть пробелы.
1
Tiva
94 / 94 / 21
Регистрация: 25.04.2012
Сообщений: 429
09.01.2013, 18:12 #5
народ, вы же с++ учите, а не Си, stl для кого придуман?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main()
{
    setlocale(0,"");
    string s="asd qwe zxc";
    istringstream iss(s);
    vector <string> t;
    while(iss)
    {
        string temp;
        iss>>temp;
        t.push_back(temp);
    }
    for(int i=0; i<t.size(); i++)
        cout<<t[i]<<endl;
    system("pause");
}
1
Croessmah
++Ͻ
14148 / 8073 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
09.01.2013, 18:15 #6
Цитата Сообщение от Tiva Посмотреть сообщение
народ, вы же с++ учите, а не Си, stl для кого придуман?
то есть string не из stl?
И setlocale - это Си'шная функция

как вариант еще:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <algorithm>
int main(){
    std::string s="Hello world";
    std::string ss(s.begin(),std::find(s.begin(),s.end(),' ')); 
    std::cout<<ss;
    return 0;
}
1
Leew
1 / 1 / 1
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 18:25  [ТС] #7
Всех благодарю за помощь. Но не могу понять что конкретно делает эта часть кода:
C++
1
string s2 = (n != string::npos) ? s.substr(0, n) : "";
А вот эта строчка, как я понимаю, ищет пробел от начала строки до конца и если находит это то записывает все, все символы до него в другую переменную?
C++
1
std::string ss(s.begin(),std::find(s.begin(),s.end(),' '));
0
zener
22 / 9 / 2
Регистрация: 16.10.2010
Сообщений: 115
09.01.2013, 18:29 #8
Цитата Сообщение от Tiva Посмотреть сообщение
народ, вы же с++ учите, а не Си, stl для кого придуман?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main()
{
    setlocale(0,"");
    string s="asd qwe zxc";
    istringstream iss(s);
    vector <string> t;
    while(iss)
    {
        string temp;
        iss>>temp;
        t.push_back(temp);
    }
    for(int i=0; i<t.size(); i++)
        cout<<t[i]<<endl;
    system("pause");
}
ой народ - зачем тыкать Локаль, если работа идет с английскими буквами?
0
Croessmah
++Ͻ
14148 / 8073 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
09.01.2013, 18:29 #9
Цитата Сообщение от Leew Посмотреть сообщение
А вот эта строчка, как я понимаю, ищет пробел от начала строки до конца и если находит это то записывает все, все символы до него в другую переменную?
std::find ищет в строке пробел и возвращает итератор на него.
У класса basic_string есть конструктор, который создает строку из последовательности от начального итератора, до последнего. В данном случае от
s.begin() - начало строки
до найденного в строке пробела
0
Leew
1 / 1 / 1
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 18:32  [ТС] #10
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
0
Croessmah
++Ͻ
14148 / 8073 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
09.01.2013, 18:33 #11
Цитата Сообщение от Leew Посмотреть сообщение
Но не могу понять что конкретно делает эта часть кода:
Если пробел найден, то s2 присваивается подстрока от начала s, до пробела, иначе s2 присваивается пустая строка
1
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
09.01.2013, 18:35 #12
А еще вот так можно:
C++
1
2
3
4
5
6
7
8
9
#include <algorithm>
#include <boost/algorithm/string.hpp>
 
int main() {
   std::vector<std::string> splitted;
   std::string original = "Hello World";
   boost::split(splitted, original, boost::is_any_of(" "), boost::token_compress_on);
   std::copy(splitted.begin(), splitted.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
1
m1Rr0r
247 / 230 / 45
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
09.01.2013, 18:38 #13
Цитата Сообщение от Leew Посмотреть сообщение
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
isdigit();
atoi();
1
Leew
1 / 1 / 1
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 18:57  [ТС] #14
Цитата Сообщение от m1Rr0r Посмотреть сообщение
atoi();
Только если работать с типом char. А чтобы из типа string в тип int преобразовать?

Добавлено через 8 минут
Разобрался с проблемой, надо было использовать такую строчку кода для преобразования, возможно кому-то пригодится:
C++
1
2
string s="123";
int n=atoi(s.c_str());
0
Tiva
94 / 94 / 21
Регистрация: 25.04.2012
Сообщений: 429
09.01.2013, 19:18 #15
Цитата Сообщение от Croessmah Посмотреть сообщение
то есть string не из stl?
И setlocale - это Си'шная функция
я о символьных масивах и не использовании sstream

Цитата Сообщение от zener Посмотреть сообщение
ой народ - зачем тыкать Локаль, если работа идет с английскими буквами?
локаль создается автокодом при создании нового пустого консольного проекта
0
Croessmah
09.01.2013, 19:38
  #16

Не по теме:

Цитата Сообщение от Tiva Посмотреть сообщение
я о символьных масивах
не умение ими пользоваться может сказаться печально
Цитата Сообщение от Tiva Посмотреть сообщение
использовании sstream
Вообще тут не нужен

1
jahapups
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 6
15.01.2013, 22:00 #17
Leew, тоже надо,помогите...
0
15.01.2013, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 22:00
Привет! Вот еще темы с решениями:

Дан текст. Определить, содержит ли он символы, отличные от букв и пробела
Дан текст; определить, содержит ли он символы, отличные от букв и пробела.

Дан текст; определить, содержит ли он символы, отличные от букв и пробела.
Дан текст; определить, содержит ли он символы, отличные от букв и пробела.

Определить содержит ли введенный текст символы, отличные от строчных букв и пробела
Определит содержит ли введенный текст символы, отличные от строчных латинских...

Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела
Из заданной пользователем строки сформулируйте новую, добавив пробел перед...


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

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

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