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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
Leew
 Аватар для Leew
1 / 1 / 0
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 17:54     Как взять символы из строки до пробела? #1
Помогите разобраться. Есть строка символов типа string, допустим:
C++
1
string s="Hello World!";
Нужно взять из строки все символы от начала до пробела, и записать в другую переменную. Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2013, 17:54     Как взять символы из строки до пробела?
Посмотрите здесь:

C++ Определить содержит ли введенный текст символы, отличные от строчных букв и пробела
определить, содержит ли текст символы, отличные от букв и пробела C++
Дан текст; определить, содержит ли он символы, отличные от букв и пробела. C++
C++ Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2.
Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zener
22 / 9 / 1
Регистрация: 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;
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
09.01.2013, 18:07     Как взять символы из строки до пробела? #3
C++
1
2
size_t n = s.find(' ');
string s2 = (n != string::npos) ? s.substr(0, n) : "";
extenup
53 / 53 / 3
Регистрация: 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 правильнее написал.. надо убедиться что в строке есть пробелы.
Tiva
94 / 94 / 1
Регистрация: 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");
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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;
}
Leew
 Аватар для Leew
1 / 1 / 0
Регистрация: 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(),' '));
zener
22 / 9 / 1
Регистрация: 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");
}
ой народ - зачем тыкать Локаль, если работа идет с английскими буквами?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
09.01.2013, 18:29     Как взять символы из строки до пробела? #9
Цитата Сообщение от Leew Посмотреть сообщение
А вот эта строчка, как я понимаю, ищет пробел от начала строки до конца и если находит это то записывает все, все символы до него в другую переменную?
std::find ищет в строке пробел и возвращает итератор на него.
У класса basic_string есть конструктор, который создает строку из последовательности от начального итератора, до последнего. В данном случае от
s.begin() - начало строки
до найденного в строке пробела
Leew
 Аватар для Leew
1 / 1 / 0
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 18:32  [ТС]     Как взять символы из строки до пробела? #10
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
09.01.2013, 18:33     Как взять символы из строки до пробела? #11
Цитата Сообщение от Leew Посмотреть сообщение
Но не могу понять что конкретно делает эта часть кода:
Если пробел найден, то s2 присваивается подстрока от начала s, до пробела, иначе s2 присваивается пустая строка
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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"));
}
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
09.01.2013, 18:38     Как взять символы из строки до пробела? #13
Цитата Сообщение от Leew Посмотреть сообщение
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
isdigit();
atoi();
Leew
 Аватар для Leew
1 / 1 / 0
Регистрация: 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());
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.01.2013, 19:18     Как взять символы из строки до пробела? #15
Цитата Сообщение от Croessmah Посмотреть сообщение
то есть string не из stl?
И setlocale - это Си'шная функция
я о символьных масивах и не использовании sstream

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 22:00     Как взять символы из строки до пробела?
Еще ссылки по теме:

C++ Написать программу, удаляющую символы пробела в файле
C++ Как определить конец введенной строки и взять последние 5 символов?
C++ Дан текст. Определить, содержит ли он символы, отличные от букв и пробела

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

Или воспользуйтесь поиском по форуму:
jahapups
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 6
15.01.2013, 22:00     Как взять символы из строки до пробела? #17
Leew, тоже надо,помогите...
Yandex
Объявления
15.01.2013, 22:00     Как взять символы из строки до пробела?
Ответ Создать тему
Опции темы

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