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

Криво работает удаление пробелов из строки - C++

Восстановить пароль Регистрация
 
JustLive
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:17     Криво работает удаление пробелов из строки #1
Нашел в нете код

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string s(" Test Test ");
    remove(s.begin(), s.end(), ' ');
    std::cout << s << std::endl;
    return 0;
}
по идее должен выводить:
TestTest

Но выводит:
TestTestst

В чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 01:17     Криво работает удаление пробелов из строки
Посмотрите здесь:

Удаление лишних пробелов в начале и конце строки. C++
Удаление пробелов из строки C++
C++ Удаление пробелов и строки
C++ Rand в матрице работает криво.
C++ Удаление пробелов из строки TCHAR
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
10.05.2013, 01:28     Криво работает удаление пробелов из строки #2
std:remove _не_ изменяет размер контейнера. Но возвращает итератор за новый последний элемент.
JustLive
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:29  [ТС]     Криво работает удаление пробелов из строки #3
NoMasters, а что надо сделать, чтобы работало как надо?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
10.05.2013, 01:30     Криво работает удаление пробелов из строки #4
JustLive, ошибка в том, что remove ничего не удаляет. На самом деле, он просто переупорядочивает элементы и возвращает итератор на новый конец. Т.е. нужно что-то типа:
C++
1
s.erase(remove(s.begin(), s.end(), ' '), s.end());
JustLive
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:31  [ТС]     Криво работает удаление пробелов из строки #5
nonedark2008, спасибо, заработало!
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
10.05.2013, 01:32     Криво работает удаление пробелов из строки #6
C++
1
s.erase(remove(s.begin(), s.end(), ' '), s.end());
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.05.2013, 01:36     Криво работает удаление пробелов из строки #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string s(" Test Test ");
    char ch = ' ';
    std::replace(s.begin(), s.end(), ' ', '\0');
    std::cout << s << std::endl;
    return 0;
}
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
10.05.2013, 01:49     Криво работает удаление пробелов из строки #8
xtorne21st, не сработало, да и не практично. Все отдается на усмотрение оператора вывода для строки. Лично у меня, как выводились пробелы, так "\0" и выводится пробелом.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.05.2013, 02:08     Криво работает удаление пробелов из строки #9
nonedark2008, выходит, что зависит от конкретного компилятора, у меня на gcc всё ок:
Bash
1
2
3
ilyuha21st@coldshoot:~/Projects$ ./prog
TestTest
ilyuha21st@coldshoot:~/Projects$
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
10.05.2013, 02:56     Криво работает удаление пробелов из строки #10
Цитата Сообщение от xtorne21st Посмотреть сообщение
у меня на gcc всё ок:
MinGW 4.8.0 - с пробелами.

Не по теме:

Только если когда-то понадобиться c_str(), тогда
Да и это заменяет пробелы, а не удаляет их, следовательно размер строки не меняется

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 03:38     Криво работает удаление пробелов из строки
Еще ссылки по теме:

C++ Если предложение начинается с пробелов, считать строку после пробелов. Правильно ли работает функция?
C++ Ввод строки, определение ее длины, и удаление в ней всех пробелов
C++ Не работает проверка пробелов строки из файла

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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.05.2013, 03:38     Криво работает удаление пробелов из строки #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string s(" Test Test ");
    char ch = ' ';
    std::replace(s.begin(), s.end(), ' ', '\0');
    std::cout << s << std::endl;
    std::cout << s.c_str() << std::endl;
    return 0;
}
Bash
1
2
3
4
ilyuha21st@coldshoot:~/Projects$ ./prog
TestTest
 
ilyuha21st@coldshoot:~/Projects$
с_str() - пустая строка, следовательно подобного рода "хаки" неприемлемы и их стоит избегать.
Yandex
Объявления
10.05.2013, 03:38     Криво работает удаление пробелов из строки
Ответ Создать тему
Опции темы

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