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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
JustLive
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
#1

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

10.05.2013, 01:17. Просмотров 510. Ответов 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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
10.05.2013, 01:28     Криво работает удаление пробелов из строки #2
std:remove _не_ изменяет размер контейнера. Но возвращает итератор за новый последний элемент.
JustLive
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 7
10.05.2013, 01:29  [ТС]     Криво работает удаление пробелов из строки #3
NoMasters, а что надо сделать, чтобы работало как надо?
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
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
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
10.05.2013, 01:32     Криво работает удаление пробелов из строки #6
C++
1
s.erase(remove(s.begin(), s.end(), ' '), s.end());
xtorne21st
интересующийся
303 / 274 / 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
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
10.05.2013, 01:49     Криво работает удаление пробелов из строки #8
xtorne21st, не сработало, да и не практично. Все отдается на усмотрение оператора вывода для строки. Лично у меня, как выводились пробелы, так "\0" и выводится пробелом.
xtorne21st
интересующийся
303 / 274 / 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
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 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++
Нужно написать функцию char*alltrim(char*string) для удаления пробелов в начале и конце строки с помощью указателей. Помогите завершить...

Ввод строки, определение ее длины, и удаление в ней всех пробелов - C++
Введите строку, определите ее длину, и удалите в ней все пробелы (предложите вариант без использования стандартного метода erase!

Не работает проверка пробелов строки из файла - C++
В общем задание вот: Имеется текстовый файл.Добавить в него строку из 12 черточек,разместив её:gосле последней из строк,в которых нет...

Если предложение начинается с пробелов, считать строку после пробелов. Правильно ли работает функция? - C++
Скажите пожалуйста правильно ли я написала функцию которая: если предложение начинается с пробелов она считывает строку после пробелов то...


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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 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     Криво работает удаление пробелов из строки
Ответ Создать тему
Опции темы

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