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

Палиндромы. Плох ли мой код? - C++

Восстановить пароль Регистрация
 
Chernobyl
211 / 211 / 67
Регистрация: 30.09.2012
Сообщений: 526
22.08.2013, 18:30     Палиндромы. Плох ли мой код? #1
Захотел решить задание, проверить есть ли число палиндромом или нет. Начал как всегда писать код(чисто свой вариант),а уже после этого,я сверялся с другими прогами(таких кодов оказалось полно).И заметил,что мой код совсем не похож на другие(и это не первый случай,меня это частенько мучает,не знаю,может это то,что называют иногда *собственный стиль*) Прошу знающих,взглянуть на мой код,плох ли он? Может кто-то даже развеет мои опасения(по поводу схожести кодов) или же наоборот подтвердит их.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int main()
{
SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char ch; 
    vector<char> n;
    vector<char> copy;
     cout << "Введите число. " 
     << "Для завершения ввода нажмите ENTER :"; 
     while (cin.get(ch)){//ввод по символах
         if (ch == '\n') break; //стоп-кран
         n.push_back(ch);
     }
     for(int i=0;i<n.size();i++){//копирование
        copy.push_back(n[i]);
    }
    for(int i=0;i<n.size();i++){//в копии меняем символы задом наперед
        copy[i]=n[n.size()-1-i];
    }
/*  for(int i=0;i<n.size();i++){ небольшая проверка,просто выводила вектор на экран
        cout<<copy[i];
    }*/
    
    //самое главное,ищем палиндром
    bool palindrom = true;
         for(int i=0;i<n.size();i++){//копирование
             if(copy[i] != n[i]) palindrom = false;//если хоть один символ не равен другому,то всё,труба
    }
         if(palindrom != false)//обычная проверка
             cout<<"Это палиндром!";  //диагноз
         else cout<<"Это НЕ палиндром!";
 
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ded_Vasilij
 Аватар для Ded_Vasilij
229 / 211 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
22.08.2013, 18:44     Палиндромы. Плох ли мой код? #2
Нормальный код.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.08.2013, 18:49     Палиндромы. Плох ли мой код? #3
плох:
3 цикла,
одна копия строки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
 
bool is_palindrome(const std::string& s)
{
    for (std::string::size_type i = 0, length = s.length(); 
         i < length; 
         ++i)
    {
        if (s[i] != s[length - 1 - i])
            return false;
    }
    
    return true;
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout << '\"' << str << "\" is palindrome: "
              << std::boolalpha
              << is_palindrome(str) 
              << std::endl;
    
}
и мой код тоже плох, в нем есть ещё простор для оптимизаций
Belfegor
22.08.2013, 18:53
  #4

Не по теме:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <algorithm>
 
int main() {
    std::string v, s;
    std::cin >> v;
    s = v;
    std::reverse(begin(v), end(v));
    s == v ? std::cout << "Yes\n" : std::cout << "No\n";
    return 0;
}

Jupiter
22.08.2013, 18:56
  #5

Не по теме:

Цитата Сообщение от Belfegor Посмотреть сообщение
s == v ? std::cout << "Yes\n" : std::cout << "No\n";
C++
1
std::cout << (s == v ?  "Yes\n" : "No\n");

Chernobyl
211 / 211 / 67
Регистрация: 30.09.2012
Сообщений: 526
22.08.2013, 18:57  [ТС]     Палиндромы. Плох ли мой код? #6
Jupiter, Все равно благодарю. С Вашего примера видно и так, сколько ненужного я делал.
za5
440 / 344 / 30
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
22.08.2013, 18:57     Палиндромы. Плох ли мой код? #7
всё-таки сравнивать симметричные относительно центра символы с возможностью отмены на любом этапе по-быстрее будет чем:
C++
1
2
std::reverse(begin(v), end(v));
std::cout << (s == v ? *"Yes\n" : "No\n");
т.е. с огромными палиндромами этот кусок не пойдёт
Belfegor
22.08.2013, 18:58
  #8

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
std::cout << (s == v ? *"Yes\n" : "No\n");
черт, уже 3 раз так подсказывают, когдаж уже привыкну

Chernobyl
211 / 211 / 67
Регистрация: 30.09.2012
Сообщений: 526
22.08.2013, 18:58  [ТС]     Палиндромы. Плох ли мой код? #9
Belfegor, Вас благодарю за функцию reverse(). Не знал до этого, что есть такая полезная функция.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 19:02     Палиндромы. Плох ли мой код?
Еще ссылки по теме:

Чем плох C++
Поправьте мой код (шифратор файлов) C++
Найти числа от 1 до 99 - палиндромы, которые при возведении в квадрат также дают палиндромы (используя циклы) C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
22.08.2013, 19:02     Палиндромы. Плох ли мой код? #10
Не эффективно, но:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
 
int main() {
    std::string str ;
    std::getline ( std::cin , str ) ;
    std::cout << ( std::equal ( str.begin () , str.end () , str.rbegin () ) ? "Yes":"No" ) ;
    return 0;
}
Yandex
Объявления
22.08.2013, 19:02     Палиндромы. Плох ли мой код?
Ответ Создать тему
Опции темы

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