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

Палиндром-ли вся строка - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.03.2011, 01:21     Палиндром-ли вся строка #1
Был сегодня на собеседовании, одно из заданий было определить является-ли строка палиндромом.
Пример строки был задан такой: а роза упала на лапу азора.
Пробелы могут быть несемметричны.
Входная строка не должна меняться.

Я написал там на листочке нечто вроде.

C++
1
2
3
4
5
6
7
8
bool isPal(const std::string& str)
{
    std::string new_str=const_cast<char*>(str.c_str());
    new_str.erase(std::remove(new_str.begin(), new_str.end(), ' '), new_str.end());
    std::string new_str_rev=new_str;
    std::reverse(new_str_rev.begin(), new_str_rev.end());
    return new_str == new_str_rev;
}
На что мне сказали, что условие не выполняется. Ну впринципе конечно да, но ведь исходная строка не меняется никаким макаром.

Подумав сейчас решил написать некий такой вариант. Впринципе определяет по идее, но не уверен в правильности.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool isPal(const std::string& one)
{
    for(size_t i=0, j=one.size()-1; i < one.size() && j > 0; ++i, --j)
    {
        if(one[i] == ' ')
            ++i;
        if(one[j] == ' ')
            --j;
        else if(one[i] != one[j])
            return false;
    }
    return true;
}
Ну и еще вопрос на засыпку, почему на собеседованиях просят точный ответ на инструкцию вроде

C++
1
2
int i=5; 
i=++i + ++i;
И ответ, что это UB почему-то не котируется.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 15:51     Палиндром-ли вся строка
Еще ссылки по теме:

Для всех и вся - Компилятор и IDE! C++
C++ Дана строка. Определить минимальное количество символов, которые нужно добавить, чтобы получить палиндром
C++ Очищается ли вся динамическая память по завершению программы?

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

Или воспользуйтесь поиском по форуму:
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
08.04.2011, 15:51     Палиндром-ли вся строка #21
сегодня нечем было занятся. вспомнил задачку про палиндром.)
впринцепи решение как у rangerx, за исключением того, что заюзал итераторы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
bool IsPalindrome(const std::string& arg) { 
    std::string::const_iterator it = arg.begin();
    std::string::const_reverse_iterator rev_it = arg.rbegin();
    while(it != arg.end()) {
        
        if(*it == ' ') ++it;
        else if(*rev_it == ' ') ++rev_it;
        else if (*it++ != *rev_it++) return false;
    }
 
    return true;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yandex
Объявления
08.04.2011, 15:51     Палиндром-ли вся строка
Ответ Создать тему
Опции темы

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