Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Olejeg85
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
1

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

16.06.2011, 11:19. Просмотров 820. Ответов 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;
}
но он помимо знака пунктуации цепляет еще и букву перед ним, как это можно исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2011, 11:19
Ответы с готовыми решениями:

Удалить символ из строки
Здравствуйте! Помогите пожалуйста. В задаче нужно удалить символ из строки ...

Удалить символ из строки
Данна строка удалить символ (:) и подсчитать количество удаленных символов...

Как удалить заданый символ из строки
Подскажите пожалуйста как удалить из строки например символ 'a' и вивести эту...

Работа со строками. Как удалить символ с строки
Здраствуйте помогите пожалуйста. не знаю как удалать символы с строки знаю...

Удалить символ из строки, который совпадает с заданным символом
нужно написать программу с функцией, которая удаляет из строки все элементы,...

6
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,680
Завершенные тесты: 1
16.06.2011, 11:28 2
Посмотрите на программы из этого топика Обработка строк в постах 2 и 3. Надеюсь сообразите, как нужно изменить, под Ваш случай.
0
Olejeg85
13 / 10 / 1
Регистрация: 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 поэтому еще как-то можно сделать, но я не знаю как, если не сложно подскажите, и второй из моего первого поста я не понял почему вместо одного символа убирается два
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,680
Завершенные тесты: 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;
}
0
xAtom
918 / 743 / 299
Регистрация: 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());
 
}
0
sandye51
16.06.2011, 14:15
  #6

Не по теме:

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

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

0
diagon
Higher
1937 / 1203 / 120
Регистрация: 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;
}
0
16.06.2011, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2011, 14:24

Как удалить последний символ строки(голову в стеке)
struct List { int x; List *Next,*Head;} ; void Add (int x,...

Дана строка А и символ s. Удалить из строки символы, размещенные в символа s
Дана строка А и символ s. Удалить из строки символы, размещенные до символа s....

Как удалить символ перевода строки, который оставляет cin
Как удалить символ перевода строки, который оставляет cin. Нужно вводить в...


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

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

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