Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73

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

26.07.2011, 09:29. Показов 2430. Ответов 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.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2011, 09:29
Ответы с готовыми решениями:

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

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

Проблема с типом данных bool, string
#include &lt;TXLib.h&gt; #include &lt;iostream&gt; using namespace std; void drawminion (int x4,int y4, int...

8
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.07.2011, 09:35
exkilla, Не извращаться с sscanf а записывать нормально в строчку...
1
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
26.07.2011, 09:36
const char* data() const;
The returned array points to an internal location which should not be modified directly in the program.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.07.2011, 09:37
C++
1
const char* data() const;
А теперь подумайте куда вы пишите.
1
3 / 3 / 1
Регистрация: 28.12.2009
Сообщений: 73
26.07.2011, 09:50  [ТС]
Спасибо ForEveR и oxotnik

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

C++
1
2
string t1, t2;
string str("text1 : text2");
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
26.07.2011, 10:07
Может, коряво, но все же:
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;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.07.2011, 10:27
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';
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
26.07.2011, 10:38
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... Но, подозреваю, что так делать не нужно
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
26.07.2011, 16:19
Лучший ответ Сообщение было отмечено как решение

Решение

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;
}
7
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2011, 16:19
Помогаю со студенческими работами здесь

Проблема с getline() и string в массиве структур
Хотел реализовать запись в массив слов с пробелами. Работало до этого с char но это было весьма неудобно. Когда изменил тип на string и...

Проблема с типом данных bool, string. 37 строка
#include &lt;TXLib.h&gt; #include &lt;iostream&gt; using namespace std; void drawminion (int x4,int y4, int...

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

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

Проблема с COM-объектом
Есть некий COM-объект, возвращающий некий текст. Текст хочется немножко отредактировать, а затем сохранить в файл (выбранный...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru