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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 73
#1

Проблема с объектом string - C++

26.07.2011, 09:29. Просмотров 1423. Ответов 8
Метки нет (Все метки)

Всем привет! Таким образом передаю текст объекту string:
C++
1
2
3
4
string str ;
sscanf( "cyberforum.ru", "%s" , str.data() );
cout << "string -> " << str.c_str() << endl;
cout << "length -> " << str.length() << endl;
В результате получаю вывод:

string -> cyberforum.ru
length -> 0

Если в качестве текста использовать www.cyberforum.ru, а не cyberforum.ru, то получаю:

string -> www.cyberforum.ru
length -> 117

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

P.S. Использую VS2010.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2011, 09:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема с объектом string (C++):

Задача на строки, с объектом класса string - C++
Дано осмысленное текстовое сообщение, разделенное пробелами и знаками препинания, в конце ставится точка. Поменять слова в сообщении по...

проблема с методом double to string - C++
Приветствую! Возникла проблема с преобразованием long double в string. Если понадобится я выложу весь код. void convStr(long double...

Структура и класс string. Проблема с выводом строки. - C++
Такая проблема: объявляю структуру с классом string: struct exam { std::string name; ... }; Затем объявляю...

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()? - C++
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

Как используя C-String а потом и String class варьировать вывод? - C++
Дана задача: при вводе полного И.О.Ф. (в таком порядке) выводить Ф, И и О(только первую букву и .). И если О не задано - выводить только...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.07.2011, 09:35 #2
exkilla, Не извращаться с sscanf а записывать нормально в строчку...
oxotnik
1589 / 1066 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
26.07.2011, 09:36 #3
const char* data() const;
The returned array points to an internal location which should not be modified directly in the program.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.07.2011, 09:37 #4
C++
1
const char* data() const;
А теперь подумайте куда вы пишите.
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 73
26.07.2011, 09:50  [ТС] #5
Спасибо ForEveR и oxotnik

Тогда подскажите пожалуйста, каким образом лучше всего поместить первое слово(text1) в t1, а второе(text2) в t2? Слова разделены двоеточием.

C++
1
2
string t1, t2;
string str("text1 : text2");
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
26.07.2011, 10:07 #6
Может, коряво, но все же:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main()
{
    std::string MainLine ( "text1 : text2" ), FirstWord, SecondWord;
 
    FirstWord  = MainLine.substr ( 0, MainLine.find ( " :" ) );
    SecondWord = MainLine.substr ( MainLine.find ( ": " ) + 2, MainLine.length() );
 
    std::cout << FirstWord << std::endl << SecondWord << std::endl;
 
    std::cin.get();
    return 0;
}
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.07.2011, 10:27 #7
C++
1
2
3
4
5
6
std::string line = "text1:text2");
std::vector<std::string> vec;
boost::split(vec, line, boost::is_any_of(";"), boost::token_compess_on);
std::string first = vec.at(0);
std::string second = vec.at(1);
std::cout << first << ' ' << second << '\n';
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
26.07.2011, 10:38 #8
C++
1
2
3
4
5
6
7
    string str1, str2;
    char s1[100], s2[100];
 
    sscanf("cyberforum ; ru", "%s ; %s", s1, s2);
    str1 = s1; str2 = s2;
 
    cout << str1 << ' ' << str2 << endl;
Или если вам так хочется заюзать sscanf... Но, подозреваю, что так делать не нужно
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
26.07.2011, 16:19 #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
25
#include <iostream>
#include <sstream>
#include <string>
#include <locale>
#include <cstddef>
 
int main()
{
    typedef std::ctype<char> Ctype;
 
    Ctype::mask table[Ctype::table_size] = { Ctype::mask() };
    table[static_cast<std::size_t>(' ')] = Ctype::space;
    table[static_cast<std::size_t>(':')] = Ctype::space;
 
    std::string str = "text1 : text2";
    std::istringstream stream(str);
    stream.imbue(std::locale(stream.getloc(), new Ctype(table)));
 
    std::string t1, t2;
    stream >> t1 >> t2;
 
    std::cout << t1 << '\n' << t2 << '\n';
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 16:19
Привет! Вот еще темы с ответами:

Как преобразовать char* в string и вывести переменную string на экран? - C++
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? - C++
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Заменить использование istringstream на вариант из string или string.h - C++
Как заменить 14 строку функцией из &lt;string&gt; или &lt;string.h&gt; и без &lt;sstream&gt; {deleted} П.5.19.Правил Запрещено создавать темы в виде...


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

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

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