Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
1

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

10.05.2013, 01:17. Просмотров 732. Ответов 10
Метки нет (Все метки)

Нашел в нете код

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

В чем ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2013, 01:17
Ответы с готовыми решениями:

Удаление пробелов из строки
нужно удалить пробеллы из строки использовав для ввод gets(str); Char str и реализовать алгоритм...

Удаление пробелов из строки
Выдает ошибку на картинке, помогите найти проблему, пожалуйста. namespace...

Удаление пробелов и строки
имеется строка s1 (string) с содержанием &quot;privet kak&quot; нужно в вектор передать сначала privet потом...

Удаление пробелов из строки TCHAR
Нужно удалить все пробелы. MFC не сработал. CString::Remove(_T(' ')); CString::Replace(_T(&quot; &quot;),...

10
Псевдослучайный
1933 / 1134 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
10.05.2013, 01:28 2
std:remove _не_ изменяет размер контейнера. Но возвращает итератор за новый последний элемент.
0
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:29  [ТС] 3
NoMasters, а что надо сделать, чтобы работало как надо?
0
1339 / 982 / 309
Регистрация: 28.07.2012
Сообщений: 2,736
10.05.2013, 01:30 4
JustLive, ошибка в том, что remove ничего не удаляет. На самом деле, он просто переупорядочивает элементы и возвращает итератор на новый конец. Т.е. нужно что-то типа:
C++
1
s.erase(remove(s.begin(), s.end(), ' '), s.end());
1
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:31  [ТС] 5
nonedark2008, спасибо, заработало!
0
Псевдослучайный
1933 / 1134 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
10.05.2013, 01:32 6
C++
1
s.erase(remove(s.begin(), s.end(), ' '), s.end());
1
интересующийся
307 / 278 / 93
Регистрация: 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;
}
0
1339 / 982 / 309
Регистрация: 28.07.2012
Сообщений: 2,736
10.05.2013, 01:49 8
xtorne21st, не сработало, да и не практично. Все отдается на усмотрение оператора вывода для строки. Лично у меня, как выводились пробелы, так "\0" и выводится пробелом.
1
интересующийся
307 / 278 / 93
Регистрация: 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$
0
++Ͻ
16489 / 9543 / 1839
Регистрация: 27.09.2012
Сообщений: 23,618
Записей в блоге: 2
10.05.2013, 02:56 10
Цитата Сообщение от xtorne21st Посмотреть сообщение
у меня на gcc всё ок:
MinGW 4.8.0 - с пробелами.

Не по теме:

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

0
интересующийся
307 / 278 / 93
Регистрация: 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() - пустая строка, следовательно подобного рода "хаки" неприемлемы и их стоит избегать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2013, 03:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление пробелов из строки и их перенос
Нужна программа,которая будет удалять все пробелы из строки 1 и переносить их в начало строки 2

Удаление из строки пробелов и дубликатов
Задача: Вводится строка. Требуется удалить из нее повторяющиеся символы и все пробелы. Без...

Удаление лишних пробелов в конце строки
На проверочном сайте мое решение не проходит из-за лишнего пробела в выходной строке, как его...

Удаление всех пробелов из введенной строки
2)Написать программу удаления всех пробелов из введенной строки. написать отдельно а потом вместе...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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