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

Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки - C++

Восстановить пароль Регистрация
 
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
19.02.2014, 16:49     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #1
Дана строка s, содержащая n символов s1, s2, ... , sn,. Если эта строка является Палиндромом то есть s1 = sn, s2= sn-1..., то оставить его без смены, иначе - дополнить эту строку его «зеркальным» отражением без повторение последнего символа (s1,s2,...,sn-1,sn, sn-1,...,s2,s1). Не пойму как можно реализовать , помогите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2014, 16:49     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки
Посмотрите здесь:

дана строка содержащая число в ... C++
Дана строка, содержащая текст на русском языке C++
Дана строка, содержащая англ. текст C++
Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры C++
C++ Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
19.02.2014, 17:12     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Anwer Посмотреть сообщение
Дана строка s, содержащая n символов s1, s2, ... , sn,. Если эта строка является Палиндромом то есть s1 = sn, s2= sn-1..., то оставить его без смены, иначе - дополнить эту строку его «зеркальным» отражением без повторение последнего символа (s1,s2,...,sn-1,sn, sn-1,...,s2,s1). Не пойму как можно реализовать , помогите пожалуйста.
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
bool check_palindrom(const std::string& str)
{
    for (int i =0 ; i < str.size()/2; ++i)
        if (str[i] != str[str.size() 1 - i]) return false;
 
    return true;
}
 
void get_mirror_str(std::string& str)
{
    std::string mirror = str;
    std::reverse(mirror.begin(), mirror.end());
    str.insert(str.end(), mirror.begin(), mirror.end());
}
 
int main()
{
    std::string s = "abc";
    if (!check_palindrom(s))
        get_mirror_str(s);
 
    std::cout << s;
 return 0;
}
Добавлено через 7 минут
Очепятка
C++
1
if (str[i] != str[str.size() 1 - i]) return false;
измените на
C++
1
if (str[i] != str[str.size() - 1 - i]) return false;
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
19.02.2014, 17:37  [ТС]     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #3
Спасибо, можете объяснить решение, или чуть проще написать сам код.

Добавлено через 7 минут
программа не работает
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
19.02.2014, 17:55     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #4
Цитата Сообщение от Anwer Посмотреть сообщение
Спасибо, можете объяснить решение, или чуть проще написать сам код.

Добавлено через 7 минут
программа не работает
Почему? Что выводит? Или какие ошибки?
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
19.02.2014, 18:00  [ТС]     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #5
C++
1
std::cout << s;
- в самом конце подчеркивает
Можете объяснить
C++
1
2
3
4
5
6
void get_mirror_str(std::string& str)
{
    std::string mirror = str;
    std::reverse(mirror.begin(), mirror.end());
    str.insert(str.end(), mirror.begin(), mirror.end());
}
Что за mirror, mirror. begin?? str.insert? просто не понимаю, а точнее не учил пока что этого, но хотелось бы научится и понять. А и в каждой функции вы объявляете std::string& str Что это тоже значит?
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
19.02.2014, 18:14     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Anwer Посмотреть сообщение
std::cout << s; - в самом конце подчеркивает
Добавьте сверху строку
C++
1
2
#include <iostream>
#include <string>
Добавлено через 38 секунд
Цитата Сообщение от Anwer Посмотреть сообщение
Что за mirror, mirror. begin?? str.insert? просто не понимаю, а точнее не учил пока что этого, но хотелось бы научится и понять. А и в каждой функции вы объявляете std::string& str Что это тоже значит?
Вот мой код с комментариями.
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 check_palindrom(const std::string& str) //функция проверки на палиндромность
{
    for (int i =0 ; i < str.size()/2; ++i) //запускаем цикл 
        if (str[i] != str[str.size() - 1 - i]) return false; // если хотя бы одни симметричные элементы не равны, то уже нет смысла смотреть дальше, потому возвращаем false
 
    return true; //если все элементы симметричны, то программа приходит сюда и возвращает true, то есть потверждение палиндромности
}
 
void get_mirror_str(std::string& str) //функция отзеркаливания
{
    std::string mirror = str; // создаем строку, которая равна входящей
    std::reverse(mirror.begin(), mirror.end()); // а тут мы ее отзеркаливаем, то есть переворачиваем с помощью функции reverse
    str.insert(str.end(), mirror.begin() + 1, mirror.end()); // а здесь лепим всё воедино 
}
 
int main()
{
    std::string s = "amerikakirema";
    if (!check_palindrom(s))
        get_mirror_str(s);
 
    std::cout << s;
 return 0;
}
Если вопросы всё еще есть - задавайте.

Добавлено через 4 минуты
По поводу std::string& str.
Это передача переменной по ссылке. Если посмотрите в мейн, то увидите, что функция
get_mirror_str(s); не возвращает нам отзеркаленную строку. Почему?
Потому что я передала туда строку ПО ССЫЛКЕ, то бишь - передела сам кусок памяти, в которой хранится строка. И эта функция будет работать непосредственно с этой переменной.
Если не понятно, то можете изменить код для облегчения и сделать так
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 check_palindrom(const std::string str) 
{
    for (int i =0 ; i < str.size()/2; ++i) 
        if (str[i] != str[str.size() - 1 - i]) return false;
 
    return true; 
}
 
std::string  get_mirror_str(std::string str) // <-- Вот тут передаем не переменную s, а само значение "ameriakirema"
{
    std::string mirror = str;
    std::reverse(mirror.begin(), mirror.end()); 
    str.insert(str.end(), mirror.begin() + 1, mirror.end()); 
    return mirror;
}
int main()
{
    std::string s = "amerikakirema";
    if (!check_palindrom(s))
        s = get_mirror_str(s);
 
    std::cout << s;
 return 0;
}
Добавлено через 4 минуты
Функция std::insert позволяет вставлять одну строку во вторую. (Не только строки, но в данном случае -их).
А в саму функцию передаем параметры std::insert(*куда вставляем*,*начало того, что вставляем*, *конец того, что вставляем*)
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
21.02.2014, 00:08  [ТС]     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #7
std:: Можно убрать, а если его убрать, нечего ведь не изменится. P.S. никогда не использовал std::, вводил вначале всегда using namespace std; P.S. спасибо что разжевали задачу, как я понял, #include <string> это библиотека строк? И последний вопрос, mirror.begin() что значит begin, end? Углубленно не изучал это.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
21.02.2014, 01:07     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #8
Цитата Сообщение от Anwer Посмотреть сообщение
std:: Можно убрать, а если его убрать, нечего ведь не изменится. P.S. никогда не использовал std::, вводил вначале всегда using namespace std; P.S. спасибо что разжевали задачу, как я понял, #include <string> это библиотека строк? И последний вопрос, mirror.begin() что значит begin, end? Углубленно не изучал это
Стринг - это класс. А <string> - библиотека класса. begin() - итератор начала вектора, end() - итератор конца вектора.

Добавлено через 56 секунд
Цитата Сообщение от Anwer Посмотреть сообщение
std:: Можно убрать, а если его убрать, нечего ведь не изменится.
Если не будет using namespace std; то изменится.
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
21.02.2014, 02:00  [ТС]     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #9
Без использования векторов возможно написать задачу?

Добавлено через 33 минуты
Попробовал написать попроще, но не вышло.
Нужно что-то попроще написать. Возможно ли такое? Смущают очень векторы
std::reverse(mirror.begin(), mirror.end());
str.insert(str.end(), mirror.begin() + 1, mirror.end());
return mirror;
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
#include <iostream>
#include <clocale>
#include <stdlib.h>
#include <ctime>
using namespace std;
void main()
{
setlocale(LC_CTYPE,"rus");
const int size = 10;
const int size1=9;
char a[size];
char b[size1];
cin»a[size];
for (int i=0;i<size;i++)
{
if((a[0]==a[size])&&(a[1]==a[size-1])&&(a[2]==a[size-2]&&(a[3]==a[size-3])&&(a[0]==a[size])&&(a[4]==a[size-4])))
{
cout«a[size];
}
else
{
for (int i=size-1;i>0;i--)
{
for (int j=0;j<size1;j++)
{
a[j]=a[i];
cout«a[j];
}
}
}
}
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 11:14     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки
Еще ссылки по теме:

C++ Зеркальное отражение строки
C++ Строка символов s1, s2, . , sn. Зеркальное отражение строки без последнего символа
Проверка на зеркальное отражение строки C++

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

Или воспользуйтесь поиском по форуму:
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
21.02.2014, 11:14     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки #10
А почему Вас смущает вектор? Это тот же массив, грубо говоря, но в нём есть еще и готовые функци для работы с элементами.

Добавлено через 35 минут
То есть Вам нужно всё в мейне, без функций и стандартных методов?

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    std::string s = "amerikakirema";
    bool fl = true;
    for (int i =0 ; i < s.size()/2; ++i)
        if (s[i] != s[s.size() - 1 - i])
        { 
            fl = false; 
            break;
        }
    if (!fl)
    {
        int size = s.size();
        for (int i = 0; i < size; ++i)
            s += s[size - 1 - i];
    }
    std::cout << s;
 return 0;
}
Можно так. Но без std::string будет грустно.

Добавлено через 2 минуты
Цитата Сообщение от Anwer Посмотреть сообщение
if((a[0]==a[size])&&(a[1]==a[size-1])&&(a[2]==a[size-2]&&(a[3]==a[size-3])&&(a[0]==a[size])&&(a[4]==a[size-4])))
Зачем такой изврат?о_О
А если у Вас будет предложение из миллиона букв?
Yandex
Объявления
21.02.2014, 11:14     Дана строка s, содержащая n символов s1, s2, . , sn,. Зеркальное отражение строки
Ответ Создать тему
Опции темы

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