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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 00:16   #1
Aleksandr_Yanov
Подтвердите свой е-майл
 
Регистрация: 13.06.2010
Сообщений: 39
Радость Как изменить строку?Есть примерно код.

К примеру,программа отслеживает слова полиндромы(т.е. wow , Madam,I'm Adam , OttO,...)не зависимо от регистра.
Как убрать символы препинания и оставить только буквы(к примеру:MadamImAdam)
Код:
#include <cstdlib>
#include <iostream>
#include <string>
using std::string;
bool isPal(const string & s);
int main(int argc, char *argv[])
{
    using namespace std;
    cout<<"Vvedite slovo(exit dlya zavershenia):\n";
    string name;
    std::getline(cin,name);
    if(name == "exit") //proverka na vhode
    return 0;
    do
    {
        for(int i = 0; i < name.size();i++) // pervodim vse vhodyshie stroki
          name[i] = tolower(name[i]);        //v nijniy registr   
       
       if(isPal(name))
       {
          cout<<"wow!polindrom:\n";
          cout<<name<<endl;
       }
        else
          cout<<"Poprobuyte eshe raz!";
     
        cout<<"Vvedite slovo(exit dlya zavershenia):\n";
    }while(cin>>name && name != "exit");
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
bool isPal(const string & s)
{
    string rev(s.rbegin(), s.rend()); // construct reversed string
    return(rev == s);
    
}

Последний раз редактировалось Aleksandr_Yanov; 25.08.2010 в 20:37.
Aleksandr_Yanov вне форума Ответить с цитированием
Старый 25.08.2010, 00:25   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вот такая вот функция выкинет все символы кроме букв (используем известную функцию isalpha()):
Код:
char* DelSymb(char* str)
   {
   int len = strlen(str);
   char* s = new char[len];
   int j = 0;
   for (int i = 0; i < len; i++)
      if (isalpha(str[i]))
         s[j++] = str[i];
   s[j] = 0;
   return s;
   }
Точно не проверял, но если нет мелких описок, должно работать.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.08.2010, 00:52   #3
Aleksandr_Yanov
Подтвердите свой е-майл
 
Регистрация: 13.06.2010
Сообщений: 39
По умолчанию

А как мне теперь её встроить в main?

Мне теперь нужно,как я понял,создать указатель
в main,который будет принимать результат вашей функции?
Но у меня ведь тип string.Как же быть?
Aleksandr_Yanov вне форума Ответить с цитированием
Старый 25.08.2010, 10:42   #4
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <locale>
#include <string>
#include <iostream>

void deleteNotLetters( std::string &str ){
    for( std::string::size_type i = 0; i < str.length(  );)
	if( std::isalpha( str[ i ], std::locale( "" ) ) )
	    ++i;
	else
	    str.erase( i, 1 );
}

int main( ){
    std::string test( "qwertyuiop[ ]1234567890-=zxcvbnm,.]");
    deleteNotLetters(  test );
    std::cout << test << '\n';
}
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 25.08.2010, 13:44   #5
Aleksandr_Yanov
Подтвердите свой е-майл
 
Регистрация: 13.06.2010
Сообщений: 39
По умолчанию

ozo,спасибо!
Запустил,всё ок,вот только не пойму зачем нужна вот эта библиотека(если не секрет):
locale? У меня без неё работает всё

А как возможно ещё пробелы удалять?
Polinom,n monilop
Ещё одно условие поставить в deleteNotLetters()?

Последний раз редактировалось Aleksandr_Yanov; 25.08.2010 в 14:27.
Aleksandr_Yanov вне форума Ответить с цитированием
Старый 25.08.2010, 14:00   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Ну это уже к гуглу вопросы или к справочнику по STL, в теории тогда будет работать еще и с русскими символами, но у меня таки не работает с std::string : GNU/Linux x86_64, компилятор g++ 4.5.1, а вот с std::wstring таки работает и на ура =-)
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 25.08.2010, 15:18   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Aleksandr_Yanov
Цитата:
К примеру,программа отслеживает слова полиномы
может все же палиндромы?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.08.2010, 16:36   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от Aleksandr_Yanov Посмотреть сообщение
ozo,спасибо!
А как возможно ещё пробелы удалять?
Polinom,n monilop
Ещё одно условие поставить в deleteNotLetters()?
Пробелы таки в моём примере удаляются. оО
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 25.08.2010, 20:33   #9
Aleksandr_Yanov
Подтвердите свой е-майл
 
Регистрация: 13.06.2010
Сообщений: 39
По умолчанию

др
Согласен=)
Aleksandr_Yanov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скажите плз как без исходников изменить код? Silver_sk Общие вопросы Delphi 3 02.07.2010 23:27
Как можно изменить эту функцию(код)? -ushёl- Общие вопросы C/C++ 2 09.04.2010 13:07
как изменить строку формул? Alexims Microsoft Office Excel 0 14.03.2009 23:37
Как подставить строку в код? Voyager-69 Общие вопросы Delphi 4 09.05.2008 00:08