0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 70
1

Объяснить код проверки строки на симметричность

14.12.2016, 17:07. Показов 3125. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста разобрать код, как он выполняется

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
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;
 
 
int main()
{
    setlocale(0, "");
    char w[20];
    cout << "Введите строку -> ";
    cin >> w;
 
    if (!cin) return 1;
 
    for (size_t i = 0, j = strlen(w) - 1; i < j; ++i, --j)
    {
        if (w[i] != w[j])
        {
            cout << "no\n";
            _getch();
            return 0;
        }
    }
 
 cout << "yes\n";
    _getch();
}
Добавлено через 4 минуты
Программа выполняет проверку строки на симметричность
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2016, 17:07
Ответы с готовыми решениями:

Сократить количество итераций в циклах проверки элементов массива на симметричность
Код сортирует заданный массив по главной и побочной диагонали на симметричность элементов. В случае...

Объяснить функцию проверки степени
int proverkastepeni(int n) { return !(n&amp;(n-1)); } Нашел вот такую функцию проверки степени, не...

симметричность строки на С++
Описать рекурсивную функцию, проверяющую, является ли симметричной часть строки s, начинающаяся i-м...

Мне нужно закомментировать код ниже(под словом закомментировать я подразумеваю объяснить работу каждой строки)
ВОТ ЗАДАЧА: После единых выпускных экзаменов по информатике в район пришла информация о том, какой...

8
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.12.2016, 17:08 2
Лучший ответ Сообщение было отмечено sahafarik как решение

Решение

проверка на палиндром похоже...
берется 2 переменные, которые отвечают за индексы в массиве символов, первая переменная i - указывает на начало массива, вторая j - на конец.
дальше цикл, который завершается когда i < j, и с каждым шагом цикла переменная i увеличивается на 1, а j - уменьшается на 1.
внутри цикла проверка, если i-й элемент не равен j-му, то приложение говорит: "но" и завершается, если цикл завершается, то это палиндром и выводится - йес
1
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 70
14.12.2016, 17:10  [ТС] 3
Maxim Prishchepa, А как записать это ввиду подпрограммы (функции). Саму проверку на симметричность
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.12.2016, 17:13 4
Лучший ответ Сообщение было отмечено sahafarik как решение

Решение

как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool isPalindrom(char * w)
{
for (size_t i = 0, j = strlen(w) - 1; i < j; ++i, --j)
    {
        if (w[i] != w[j])
        {
            return false;
        }
    }
return true;
}
int main()
{
    setlocale(0, "");
    char w[20];
    cout << "Введите строку -> ";
    cin >> w;
 
    if (!cin) return 1;
 
    cout << isPalindrom(w) ? "yes" : "no"; 
   _getch();
}
1
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 70
14.12.2016, 17:29  [ТС] 5
Maxim Prishchepa, Почему то при ответе, пишет либо 1 ли симметрии либо 0 если строка не симметрична , а yes или no почему то не хочет выводить, как не пытаюсь
0
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 70
14.12.2016, 17:38  [ТС] 6
Ferrari F1, Почему пр ответе выводит не yes или no, а 1 или 0

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool isPalindrom(char * w)
{
for (size_t i = 0, j = strlen(w) - 1; i < j; ++i, --j)
    {
        if (w[i] != w[j])
        {
            return false;
        }
    }
return true;
}
int main()
{
    setlocale(0, "");
    char w[20];
    cout << "Введите строку -> ";
    cin >> w;
 
    if (!cin) return 1;
 
    cout << isPalindrom(w) ? "yes" : "no"; 
   _getch();
}
0
803 / 530 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
14.12.2016, 17:40 7
sahafarik,
C++
1
cout << ( isPalindrom(w) ? "yes" : "no" );
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.12.2016, 17:42 8
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.h>
using namespace std;
 
bool isPalindrom(char * w)
{
for (size_t i = 0, j = strlen(w) - 1; i < j; ++i, --j)
    {
        if (w[i] != w[j])
        {
            return false;
        }
    }
return true;
}
int main()
{
    setlocale(0, "");
    char w[20];
    cout << "Введите строку -> ";
    cin >> w;
 
    if (!cin) return 1;
 
    cout << (isPalindrom(w) ? "yes" : "no"); 
}
1
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
14.12.2016, 17:45 9
sahafarik, не плодите темы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2016, 17:45
Помогаю со студенческими работами здесь

Рекурсия - определить симметричность строки
Используя рекурсивную логическую функцию от целых i, j, проверяющую является ли симметричной часть...

Проверить строки матрицы на симметричность
Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если k-я...

Проверка строки матрицы на симметричность
Как проверить строку матрицы на симметричность, если строка симметрична то в вектор b занести 1...

[emu8086] Симметричность символьной строки
Написать и протестировать функцию, которая определяет, является ли симметричной заданная символьная...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru