Модераторы: bsa
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Является ли строка полиндромом? Помогите плиз! Зач 
:(
    Опции темы
uper
Дата 17.12.2008, 07:23 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



   
ЗАдание следующее:

Написать программу, которая проверяет, является ли строка, введённая с клавиатуры палиндромом. 
Строка может содержать буквы разных регистров, пробелы и другие символы. 
При проверке должны учитываться только символы, являющиеся буквами. При этом не важно, к какому регистру принадлежит буква.

Решение(скопил у одногруппницы):

Код
#include<iostream>
#include<string>
using namespace std;
bool IsBukva(char symbol)
{
switch(symbol)
{
case'a':return 1;break;
case'b':return 1;break;
case'c':return 1;break;
case'd':return 1;break;
case'e':return 1;break;
case'f':return 1;break;
case'g':return 1;break;
case'h':return 1;break;
case'i':return 1;break;
case'j':return 1;break;
case'k':return 1;break;
case'l':return 1;break;
case'm':return 1;break;
case'n':return 1;break;
case'o':return 1;break;
case'p':return 1;break;
case'q':return 1;break;
case'r':return 1;break;
case's':return 1;break;
case't':return 1;break;
case'u':return 1;break;
case'v':return 1;break;
case'w':return 1;break;
case'x':return 1;break;
case'y':return 1;break;
case'z':return 1;break;
case'A':return 1;break;
case'B':return 1;break;
case'C':return 1;break;
case'D':return 1;break;
case'E':return 1;break;
case'F':return 1;break;
case'G':return 1;break;
case'H':return 1;break;
case'I':return 1;break;
case'J':return 1;break;
case'K':return 1;break;
case'L':return 1;break;
case'M':return 1;break;
case'N':return 1;break;
case'O':return 1;break;
case'P':return 1;break;
case'Q':return 1;break;
case'R':return 1;break;
case'S':return 1;break;
case'T':return 1;break;
case'U':return 1;break;
case'V':return 1;break;
case'W':return 1;break;
case'X':return 1;break;
case'Y':return 1;break;
case'Z':return 1;break;
default:return 0;
}
}
char LowReg(char symbol)
{
switch(symbol)
{
case'A':return'a';break;
case'B':return'b';break;
case'C':return'c';break;
case'D':return'd';break;
case'E':return'e';break;
case'F':return'f';break;
case'G':return'g';break;
case'H':return'h';break;
case'I':return'i';break;
case'J':return'j';break;
case'K':return'k';break;
case'L':return'l';break;
case'M':return'm';break;
case'N':return'n';break;
case'O':return'o';break;
case'P':return'p';break;
case'Q':return'q';break;
case'R':return'r';break;
case'S':return's';break;
case'T':return't';break;
case'U':return'u';break;
case'V':return'v';break;
case'W':return'w';break;
case'X':return'x';break;
case'Y':return'y';break;
case'Z':return'z';break;
default:return symbol;
}
}
string CleanString(string input)
{
string output;
string temp;
int i;
for (i=0;i<=input.length()-1;i++)
{
if (IsBukva(LowReg(input.at(i))))
{
temp = LowReg(input.at(i));
output.append(temp,0,1);
}
}
return output;
}
bool palindrom(string output)
{
int i;
for(i=0;i<=output.length()-1;i++)
{
if(output.at(i)!=output.at(output.length()-i-1))
return 0;
}
return 1;
}
void main()
{

string stroka;
cout<<"Vvedi stro4ku: ";
cin>>stroka;
cout<<palindrom(CleanString(stroka))<<'\n';


}


Объясните плиз что там происходит в программе, а то мне надо преподу будет рассказать. Ребят, очень прошу, программирование не профильный предмет, но сдавать все равно его как-то надо...


Модератор: не забываем пользоваться кнопкой "Код" и форматировать код.

Это сообщение отредактировал(а) bsa - 28.12.2009, 13:09
PM MAIL   Вверх
knut
Дата 17.12.2008, 14:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



uper, 
так подайдет?
Код

bool IsPolyndrom(const char*p_string)
{
    int i = 0;
    int j = strlen(p_string) - 1;
    while(i < j){
        if(p_string[i]!=p_string[j]){return false;}
        --j;++i;
    return true;
    }
}



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
A5uKa
Дата 28.12.2009, 12:49 (ссылка) |    (голосов:9) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



http://govnokod.ru/212


Модератор: немного подправил ссылку, чтобы всегда можно было легко найти.

Это сообщение отредактировал(а) bsa - 28.12.2009, 13:27
PM   Вверх
bsa
Дата 28.12.2009, 13:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



uper, вместо тех страшных функций нужно использовать std::isalpha() и std::tolower(). Для этого нужно подключить #include <cctype>.
А за вышеприведенный код я, будь преподавателем, поставил бы кол за тупость. Ну если не знаете про вышеупомянутые функции, то почему нельзя использовать проверку на вхождение в диапазон (x>= 'A' && x <= 'Z')?

Код
#include <iostream>  //std::cin, std::cout, std::flush, std::endl
#include <string>    //std::string, std::getline
#include <algorithm> //std::remove_if, std::transform
#include <cctype>    //std::isalpha, std::tolower

//это класс-функтор - объекты этого класса можно вызывать как функции
//функтор возвращает true, если символ не является буквой
struct IsNotAlpha
{
   bool operator()(char c) const {
      return !std::isalpha(c); //isalpha() возвращает 1, когда символ буква, поэтому делаем инверсию
   }
};

int main()
{
   std::cout << "Input line: " << std::flush;  //выводим приглашение для ввода строки
   std::string line;  //создаем переменную, в которую будет помещена вводимая строка
   std::getline(std::cin, line); //считываем строку
//   std::string::iterator it = std::remove_if(line.begin(), line.end(), IsNotAlpha());  //помещаем все небуквенные символы в конец строки, it - указывает на начало набора небуквенных символов, IsNotAlpha() - создание объекта класса IsNotAlpha
//   line.erase(it, line.end());  //удаляем все символы начиная с it и заканчивая end()
   line.erase(std::remove_if(line.begin(), line.end(), IsNotAlpha()), line.end()); //тоже самое, только одной строчкой
   std::transform(line.begin(), line.end(), line.begin(), &tolower);  //переводим все буквы в нижний регистр
   bool r = true; //если в строке нет вообще символов, то считаем ее полиндромом
   for(int i = 0, e = line.size()-1; r && (i < e); ++i, --e) //два индекса двигаются на встречу по строке (один с начала, второй с конца)
      r = (line[i] == line[e]); //сравниваем символы, если они не равны, то это не полиндром и цикл заканчивается
   std::cout << "Entered line is " << (r ? "" : "not ") << "polindrome" << std::endl; //выводим строку, в которой если r==false будет слово "not"
   return 0;  //успешное завершение программы
}


Это сообщение отредактировал(а) bsa - 28.12.2009, 14:55
PM   Вверх
xvr
Дата 28.12.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Крайне не рекомендуется копировать у одногрупниц 'Индусские' тексты, даже если понимаешь, что там написанно. А уж если не понимаешь - то и подавно  smile 
Преподавателю будет достаточно одного взгляда, что бы понять, что это все у кого то цельнотянуто. Второго взгляда будет достаточно, что бы понять у кого именно  smile 

PM MAIL   Вверх
EvilsInterrupt
Дата 28.12.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



uper, Спасибо огромное! Меня многие просят о простейших примерах оптимизации кода на С\С++, теперь буду иметь пример под рукой!
PM MAIL WWW ICQ Jabber   Вверх
A5uKa
Дата 28.12.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



... это год назад было  smile 
PM   Вверх
bsa
Дата 28.12.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



A5uKa, ну и зачем поднял? тьфу...
PM   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.