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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
26.07.2011, 09:29     Проблема с объектом string #1
Всем привет! Таким образом передаю текст объекту 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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2011, 09:35     Проблема с объектом string #2
exkilla, Не извращаться с sscanf а записывать нормально в строчку...
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
26.07.2011, 09:36     Проблема с объектом string #3
const char* data() const;
The returned array points to an internal location which should not be modified directly in the program.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2011, 09:37     Проблема с объектом string #4
C++
1
const char* data() const;
А теперь подумайте куда вы пишите.
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 68
26.07.2011, 09:50  [ТС]     Проблема с объектом string #5
Спасибо ForEveR и oxotnik

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

C++
1
2
string t1, t2;
string str("text1 : text2");
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
26.07.2011, 10:07     Проблема с объектом string #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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2011, 10:27     Проблема с объектом string #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
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
26.07.2011, 10:38     Проблема с объектом string #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... Но, подозреваю, что так делать не нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 16:19     Проблема с объектом string
Еще ссылки по теме:

C++ Ошибка в типе данных 'String' and 'System::String'
C++ Идентификатор string не определён при наличии #include <string>

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.07.2011, 16:19     Проблема с объектом string #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;
}
Yandex
Объявления
26.07.2011, 16:19     Проблема с объектом string
Ответ Создать тему
Опции темы

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