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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chernobyl
213 / 213 / 67
Регистрация: 30.09.2012
Сообщений: 542
#1

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

22.08.2013, 18:30. Просмотров 576. Ответов 9
Метки нет (Все метки)

Захотел решить задание, проверить есть ли число палиндромом или нет. Начал как всегда писать код(чисто свой вариант),а уже после этого,я сверялся с другими прогами(таких кодов оказалось полно).И заметил,что мой код совсем не похож на другие(и это не первый случай,меня это частенько мучает,не знаю,может это то,что называют иногда *собственный стиль*) Прошу знающих,взглянуть на мой код,плох ли он? Может кто-то даже развеет мои опасения(по поводу схожести кодов) или же наоборот подтвердит их.

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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2013, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Палиндромы. Плох ли мой код? (C++):

Найти все числа-палиндромы, которые не больше 100, и их квадраты тоже палиндромы - C++
Натуральное число называется палиндромом, если его запись читается однинакого с начала и с конца (4884, 393, 1). Найти все числа-паиндромы,...

Найти в заданном тексте, состоящем из n строк, все слова палиндромы и числа палиндромы - C++
Сроки жутко горят :( поэтому надеюсь на вашу помощь: Задача: Найти в заданном тексте, состоящем из n строк, все слова палиндромы и...

Найти числа от 1 до 99 - палиндромы, которые при возведении в квадрат также дают палиндромы (используя циклы) - C++
Задание: Натуральное число является палиндромом, если его запись читается одинаково с начала и с конца (как, например , 393, 1). Найти...

Подправьте мой код) - C++
Нужно вывести только буквы без символов input \\\aBaBba\\\ output AbBbBA #include &lt;iostream&gt; #include &lt;cstring&gt; ...

Посмотрите на мой код. Матрицы - C++
Накидал вот такой косой код. Программа должна определить мин и макс элемент матрицы и поменять местами строки, содержащие их. программа у...

проверьте, пожалуйста, мой первый код на c++ - C++
Переучиваюсь с Delphi на C++ Посмотрите, пожалуйста, корректность, стиль программирования, и т.п. с точки зрения visual c++ Если бы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
22.08.2013, 18:44 #2
Нормальный код.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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;
    
}
и мой код тоже плох, в нем есть ещё простор для оптимизаций
1
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;
}

1
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");

1
Chernobyl
213 / 213 / 67
Регистрация: 30.09.2012
Сообщений: 542
22.08.2013, 18:57  [ТС] #6
Jupiter, Все равно благодарю. С Вашего примера видно и так, сколько ненужного я делал.
0
za5
441 / 345 / 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");
т.е. с огромными палиндромами этот кусок не пойдёт
0
Belfegor
22.08.2013, 18:58
  #8

Не по теме:

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

0
Chernobyl
213 / 213 / 67
Регистрация: 30.09.2012
Сообщений: 542
22.08.2013, 18:58  [ТС] #9
Belfegor, Вас благодарю за функцию reverse(). Не знал до этого, что есть такая полезная функция.
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 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;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 19:02
Привет! Вот еще темы с ответами:

Поправьте мой код (шифратор файлов) - C++
Задача: сделать шифратор файлов на основе побайтового копирования с паролем вот, что у меня получилось: все работает, но только с...

Мой код вызывает аварийное завершение компилятора - C++
Я использую компилятор Borland C++ 5.1 Выполнение след. кода вызывает аварийное завершение компилятора: #include &lt;iostream.h&gt; int a; ...

Почему компиляторы на сайтах бракуют мой код? - C++
У меня всё прекрасно компилит, но, когда закидываю на сайт выдаёт ошибку компиляции. Пробовал закинуть на сайт где просто компилирует код,...

Перепишите мой код через scanf printf - C++
Замените cin cout на scaf print правильно #include &lt;cmath&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2013, 19:02
Ответ Создать тему
Опции темы

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