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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,648
Завершенные тесты: 1
#1

Проверка на зеркальное отражение строки - C++

01.05.2014, 10:42. Просмотров 1399. Ответов 24
Метки нет (Все метки)

Для общения в полевых условиях используется система обмена сообщениями WhoDown. Так
как вся связь в поле идет через радиоканал, а магнитная обстановка на поле нестабильна, то
приходится передавать сообщение так, чтобы при некоторых потерях информацию можно было
восстановить. Для того, чтобы привести сообщение в восстанавливаемый вид, его разворачивают и
приписывают к самому себе в конце, после чего передают. Так сообщение «hello» превратится в
«helloolleh». Вы отвечаете за написание программной части принимающего устройства, которая
определяет, было повреждено сообщение или нет.
Формат входных данных
На стандартный консольный вход Вашей программе подается одна строка — полученное
сообщение.
Формат выходных данных
Выведете «YES», если сообщение было повреждено во время передачи и «NO» - если не
было.
Примеры
Входные данные Ожидаемый результат работы
helloolleh NO
ghj YES
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
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char str[1000];
    cin.getline(str, 1000);
    if (strlen(str) % 2 != 0)
    {
        cout<<"YES";
    }
    else 
    {
        int i, j;
        for (i=0, j=strlen(str)-1; str[i] == str[j] && i < j; i++, j--);
        
        if (i<j)
            cout<<"YES";
        else 
            cout<<"NO";
    }
    return 0;
}
прога проходит 10 тестов. тестирующая система не дает тесты где крашится. вроде все верно,может кто-то увидит баги
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 10:42     Проверка на зеркальное отражение строки
Посмотрите здесь:
C++ Зеркальное отражение строки
C++ Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки
C++ Строка символов s1, s2, . , sn. Зеркальное отражение строки без последнего символа
Зеркальное Отражение И Сисстемы счисления C++
C++ Зеркальное отражение относительно побочной диагонали
Зеркальное отражение числа 0001->1000 C++
в двумерном массиве (NxN) произвести зеркальное отражение относительно вертикальной оси симметрии. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
01.05.2014, 12:29     Проверка на зеркальное отражение строки #2
Максимальное количество символов оговорено?
Если макс. 1000, то в массиве должно быть 1001, для нулевого символа.
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
01.05.2014, 12:48     Проверка на зеркальное отражение строки #3
Задача взята из идущей олимпиады,не помогайте ему
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.05.2014, 12:50     Проверка на зеркальное отражение строки #4
Мотороллер, см. темы с названием "палиндром".

Добавлено через 1 минуту
Tuma, идущей куда?
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
01.05.2014, 12:52     Проверка на зеркальное отражение строки #5
Куда-нибудь
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,648
Завершенные тесты: 1
01.05.2014, 13:12  [ТС]     Проверка на зеркальное отражение строки #6
Tuma, как бы да. но с моей точки зрения задача решена верно, а взять неверные тесты я не могу. поэтому и решил обратиться сюда.
Керра, все задание тут. более ничего не оговорено
tyrok
17 / 17 / 3
Регистрация: 31.03.2012
Сообщений: 86
01.05.2014, 13:33     Проверка на зеркальное отражение строки #7
А почему вы взяли массив,а не просто строку
B@tterfly
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 5
01.05.2014, 13:44     Проверка на зеркальное отражение строки #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char str[1010],str1[1010];
    cin.getline(str, 1010);
    if (strlen(str) % 2 != 0)
    {
        cout<<"YES";  
    }
    else{
        strcpy(str1,str);
        strrev(str1);
        cout<<(str1!=str?"NO":"YES");
    }  
}
пробуй
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
01.05.2014, 14:28     Проверка на зеркальное отражение строки #9
C++
1
str1!=str
так адреса первых элементов массива сравниваются, а не массивы поэлементно

Добавлено через 9 минут
C++
1
strlen(str) % 2
вот это я бы в скобки заключил, чтобы явно порядок действий указать.
Ведь если строка с нечетным кол. символов проходит эту проверку программа может выдать неверный рез-тат. Например, так, azfza, строка искажена, но программа выдаст вроде, что нет
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,648
Завершенные тесты: 1
01.05.2014, 16:25  [ТС]     Проверка на зеркальное отражение строки #10
тестер не знает strrev
IrineK
Заблокирован
01.05.2014, 16:34     Проверка на зеркальное отражение строки #11
Цитата Сообщение от Мотороллер Посмотреть сообщение
C++
1
2
3
for (i=0, j=strlen(str)-1; str[i] == str[j] && i < j; i++, j--);
if (i<j)
    cout<<"YES";
Как по-вашему это работает?

Например, строка: "helloleh"
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
01.05.2014, 18:22     Проверка на зеркальное отражение строки #12
Ну, правильно оно работает. Программа говорит есть ли ошибка в выражении. На hellooleh ошибка есть.
IrineK
Заблокирован
01.05.2014, 18:50     Проверка на зеркальное отражение строки #13
Цитата Сообщение от Керра Посмотреть сообщение
правильно оно работает
Таки да.

Добавлено через 6 минут
С логикой вроде все правильно.
Возможно, дело в длине строки. Если она не оговорена, перейдите на string.

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
#include <iostream>
#include <sstream>
using namespace std;
 
 
int main()
{   string str;
    getline(cin, str);
    if (str.length() % 2 != 0)
    {
        cout<<"YES";
    }
    else 
    {
        int i, j;
        for (i=0, j=str.length()-1; str[i] == str[j] && i < j; i++, j--);
        
        if (i<j)
            cout<<"YES";
        else 
            cout<<"NO";
    }
 
    return 0;
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.05.2014, 18:58     Проверка на зеркальное отражение строки #14
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
#include <iostream>
#include <string>
 
bool palindrom( const std::string& s )
{
    for( size_t i=0; i<s.length()/2; ++i )
    {
        if( s[i] != s[s.length()-i-1] ) return false;
    }
    return true;
}
 
bool damaged( const std::string& s )
{
    return s.length() % 2 || !palindrom( s );
}
 
int main( ) {
 
    std::string s;
    
    std::getline( std::cin, s );
 
    std::cout << (damaged( s ) ? "YES" : "NO") << std::endl;
 
    return 0;
}
http://ideone.com/zi8RJQ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2014, 11:00     Проверка на зеркальное отражение строки
Еще ссылки по теме:
Зеркальное отображение слов C++
зеркальное отображение матрицы C++
C++ Зеркальное переворачивание массива
C++ Зеркальное отображение массива
Проверка строки C++

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

Или воспользуйтесь поиском по форуму:
B@tterfly
1 / 1 / 1
Регистрация: 27.03.2014
Сообщений: 5
02.05.2014, 11:00     Проверка на зеркальное отражение строки #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char str[1010]="",str1[1010]="";
    int n,i;
    cin.getline(str, 1010);
    n=strlen(str);
    if(n%2!=0)
    {
        cout<<"YES";  
    }
    else{
        for(i=0;i<n;i++){
        str1[i]=str[n-i-1];
        }
        if(strcmp(str,str1))
        cout << "YES";
        else
        cout << "NO";   
    }  
}
вот без strrev)
Yandex
Объявления
02.05.2014, 11:00     Проверка на зеркальное отражение строки
Ответ Создать тему
Опции темы

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