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

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

Войти
Регистрация
Восстановить пароль
 
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
#1

Не получается удалить символ из строки - C++

16.06.2011, 11:19. Просмотров 738. Ответов 6
Метки нет (Все метки)

подскажите как можно удалить знак пунктуации из строки? написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <cctype>
 
using namespace std;
 
int main ()
{   
    string str;
 
    getline(cin, str);
    for(string::size_type ix=0; ix!=str.size(); ++ix)
        if(ispunct(str[ix]))
            str[ix]='\b';
 
    cout << str << endl;
    system("pause");
    return 0;
}
но он помимо знака пунктуации цепляет еще и букву перед ним, как это можно исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2011, 11:19     Не получается удалить символ из строки
Посмотрите здесь:

C++ Как удалить заданый символ из строки
Как удалить символ перевода строки, который оставляет cin C++
C++ Не получается вставить символ
C++ Ввести строку символов, если ее длина нечетная, удалить символ, стоящий посередине строки.
Из первой заданной строки удалить каждый символ, принадлежащий второй C++
C++ Удалить символ из строки
C++ В тексте удалить указанный символ везде, где он встречается. Программа не позволяет ввести символ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2918 / 1262 / 228
Регистрация: 19.01.2009
Сообщений: 3,280
Завершенные тесты: 1
16.06.2011, 11:28     Не получается удалить символ из строки #2
Посмотрите на программы из этого топика Обработка строк в постах 2 и 3. Надеюсь сообразите, как нужно изменить, под Ваш случай.
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
16.06.2011, 11:50  [ТС]     Не получается удалить символ из строки #3
получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
 
 
using namespace std;
 
int main ()
{   
    string str;
 
    getline(cin, str);
    for(string::size_type ix=0; ix!=str.size(); ++ix)
        if(ispunct(str[ix]))
            str.erase(std::remove_if(str.begin(), str.end(), ispunct), str.end());
 
    cout << str << endl;
    system("pause");
    return 0;
}
но есть пара нюансов, первый это из задания по книжке и там еще не было algorithm поэтому еще как-то можно сделать, но я не знаю как, если не сложно подскажите, и второй из моего первого поста я не понял почему вместо одного символа убирается два
schdub
 Аватар для schdub
2918 / 1262 / 228
Регистрация: 19.01.2009
Сообщений: 3,280
Завершенные тесты: 1
16.06.2011, 11:52     Не получается удалить символ из строки #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <string>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    std::cout << "Введите строку: ";
    std::string s;
    std::getline(std::cin, s);
 
    s.erase(std::remove_if(s.begin(), s.end(), ispunct), s.end());
 
    std::cout << "Строка без знаков пунктуации: ";
    std::cout << s << std::endl;
 
    system("pause");
 
    return 0;
}
xAtom
 Аватар для xAtom
911 / 736 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.06.2011, 13:27     Не получается удалить символ из строки #5
Вот варинант работает как часы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main() {
 
std::string str = "Test;,,,. Ops 'ops', TERMINATOR 200211";
 
std::string::iterator   iter = str.begin();
while( iter != str.end() ) {
       if( ispunct( *iter )) {
    str.erase(iter);
    iter = str.begin();
       }
      *iter++;
}
 
puts( str.c_str());
 
}
sandye51
16.06.2011, 14:15
  #6

Не по теме:

xAtom, гавенный вариант.

Цитата Сообщение от xAtom Посмотреть сообщение
работает как часы:
которые у моей бабушки в деревне

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2011, 14:24     Не получается удалить символ из строки
Еще ссылки по теме:

C++ Как удалить последний символ строки(голову в стеке)
C++ Удалить символ из строки, который совпадает с заданным символом
Из текста удалить заданный символ, каждый раз сдвигая оставшуюся часть каждой строки “влево” C++
Удалить символ из строки C++
C++ Работа со строками. Как удалить символ с строки

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.06.2011, 14:24     Не получается удалить символ из строки #7
Вариант со смещением в си стиле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cctype>
void del(char * x){
    while (*x=*(x+++1));
}
int main(){ 
    char s[100];
    std::cin.getline(s,100);
    for (char * p = s; *p; *++p)
        if (ispunct(*p)) del(p--);
    std::cout << s;
    return 0;
}
Yandex
Объявления
16.06.2011, 14:24     Не получается удалить символ из строки
Ответ Создать тему
Опции темы

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