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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
Leew
1 / 1 / 0
Регистрация: 12.10.2012
Сообщений: 29
#1

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

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

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

Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2. - C++
Вот задание: Даны строки S1 и S2. Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и...

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

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

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

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

Дан текст; определить, содержит ли он символы, отличные от букв и пробела. - 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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
09.01.2013, 18:07 #3
C++
1
2
size_t n = s.find(' ');
string s2 = (n != string::npos) ? s.substr(0, n) : "";
extenup
54 / 54 / 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
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 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;
}
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
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
09.01.2013, 18:29 #9
Цитата Сообщение от Leew Посмотреть сообщение
А вот эта строчка, как я понимаю, ищет пробел от начала строки до конца и если находит это то записывает все, все символы до него в другую переменную?
std::find ищет в строке пробел и возвращает итератор на него.
У класса basic_string есть конструктор, который создает строку из последовательности от начального итератора, до последнего. В данном случае от
s.begin() - начало строки
до найденного в строке пробела
Leew
1 / 1 / 0
Регистрация: 12.10.2012
Сообщений: 29
09.01.2013, 18:32  [ТС] #10
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
09.01.2013, 18:33 #11
Цитата Сообщение от Leew Посмотреть сообщение
Но не могу понять что конкретно делает эта часть кода:
Если пробел найден, то s2 присваивается подстрока от начала s, до пробела, иначе s2 присваивается пустая строка
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 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"));
}
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
09.01.2013, 18:38 #13
Цитата Сообщение от Leew Посмотреть сообщение
А если символы в строке окажутся числами, то как их записать в переменную чисельного типа?
isdigit();
atoi();
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 Посмотреть сообщение
ой народ - зачем тыкать Локаль, если работа идет с английскими буквами?
локаль создается автокодом при создании нового пустого консольного проекта
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 19:18
Привет! Вот еще темы с ответами:

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

Определить содержит ли введенный текст символы, отличные от строчных букв и пробела - C++
Определит содержит ли введенный текст символы, отличные от строчных латинских букв и пробела язык С не могу понять как это считать

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.01.2013, 19:18
Ответ Создать тему
Опции темы

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