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

Удалить все пробелы в строке - C++

Восстановить пароль Регистрация
 
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 08:41     Удалить все пробелы в строке #1
можно ли как то с помощью метода string.replace удалить все пробелы в строке? вот так не работает
C++
1
2
string str("this is test string");
str.replace(" ", "");
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
02.08.2014, 08:50     Удалить все пробелы в строке #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
GetHelp, используй std::string::erase и std::remove:
C++
1
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
Добавлено через 2 минуты
Цитата Сообщение от GetHelp Посмотреть сообщение
вот так не работает
И не должно, посмотри прототипы этого метода, здесь например.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 08:53  [ТС]     Удалить все пробелы в строке #3
gray_fox,
error C2660: remove: функция не принимает 3 аргументов
отсутствуют экземпляры перегруженная функция "std::basic_string<_Elem, _Traits, _Alloc>::erase [с _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]", соответствующие списку аргументов типы аргументов: (int, std::_String_iterator<std::_String_val<std::_Simple_types<char>>>) тип объекта: std::string
не существует подходящей функции преобразования из "std::_String_iterator<std::_String_val<std::_Simple_types<char>>>" в "const char *"
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
02.08.2014, 08:59     Удалить все пробелы в строке #4
GetHelp, http://ideone.com/GyNXmN
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
02.08.2014, 09:01  [ТС]     Удалить все пробелы в строке #5
gray_fox, не знал что алгоритм надо инклудить спс
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
02.08.2014, 09:26     Удалить все пробелы в строке #6
GetHelp, вообще erase возможно использовать не обязательно. erase удаляет элементы из контейнера. Пусть r - результат remove. remove перераспределит элементы так, что в первой половине ( [begin; r) ) находится результат, во второй ( [r; end) ) - остальные элементы в неопределённом порядке. Если не предполагается дальше использовать объект std::string (например надо просто вывести в консоль результат), то можно просто использовать последовательность [begin; r) без вызова erase.

Добавлено через 4 минуты
Например http://ideone.com/mndGIR

Добавлено через 10 минут
Цитата Сообщение от gray_fox Посмотреть сообщение
во второй ( [r; end) ) - остальные элементы в неопределённом порядке.
Поправлюсь: они будут не в неопределённом порядке, а в неопределённом состоянии; суть в том, что remove не освобождает память, а только перераспределяет элементы последовательности; если надо так же освободить память, то надо так же использовать и erase.
Yandex
Объявления
02.08.2014, 09:26     Удалить все пробелы в строке
Ответ Создать тему
Опции темы

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