Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2010, 20:39   #1
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию Удаление знаков

Пытаюсь удалить знаки препинания из строки, но удаляется все после первого знака
Код:
#include <string>
#include <iostream>

using std::cin;
using std::cout;
using std::string;
using std::endl;

int main()
{
    string::size_type s3;
    string s4;
    cin>>s4;
    for (s3=0; s3!=s4.size(); ++s3) if (ispunct(s4[s3])) {s4[s3]=s4[s3+1];}
    cout<< s4<<endl;
    system("PAUSE");
    return 0;
}
boomeer вне форума Ответить с цитированием
Старый 04.08.2010, 21:24   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Они не удаляются, а заменяются следующим за знаком символов. Если нужен такой принцип, то можно так (до пробела соответственно)
Код:
for (s3=0; s3<s4.size();) if (ispunct(s4[s3])) s4.erase(s3,1); else s3++;
ДОБАВЛЕНО
меняем ввод на другое, например getline (cin,s4); и т.п. тогда уже с несколькими словами будет работать

Последний раз редактировалось eoln; 04.08.2010 в 21:40. Причина: ещё добавка
eoln вне форума Ответить с цитированием
Старый 04.08.2010, 21:37   #3
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Они не удаляются, а заменяются следующим за знаком символов. Если нужен такой принцип, то можно так (до пробела соответственно)
Код:
for (s3=0; s3<s4.size();) if (ispunct(s4[s3])) s4.erase(s3,1); else s3++;
спасибо, но так же интересуют другие возможные варианты, если не затруднит
boomeer вне форума Ответить с цитированием
Старый 04.08.2010, 21:55   #4
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

вот тебе как вариант

Код:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

bool func(char rhs)
{
	return rhs == ',';
}

int main(void)
{
	string s;
	getline(cin,s);
	s.erase(remove_if(s.begin(),s.end(),func),s.end());

	cout<<s<<endl;
	cin.get();
	return 0;
}
ThisIzGame вне форума Ответить с цитированием
Старый 04.08.2010, 22:04   #5
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Цитата:
Сообщение от ThisIzGame Посмотреть сообщение
вот тебе как вариант

Код:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

bool func(char rhs)
{
	return rhs == ',';
}

int main(void)
{
	string s;
	getline(cin,s);
	s.erase(remove_if(s.begin(),s.end(),func),s.end());

	cout<<s<<endl;
	cin.get();
	return 0;
}
3й день изучаю си++, поэтому не все тут понимаю, но спасибо за помощь.
boomeer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление не нужных знаков после запятой. Alar Общие вопросы Delphi 4 31.05.2012 19:59
Подсчёт знаков Syltan JavaScript, Ajax 0 10.05.2010 02:23
Удаление знаков переноса. Lazio Помощь студентам 7 09.10.2009 22:24
(+,-,*,/)Расстановка знаков МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 5 17.04.2008 17:04