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

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

Войти
Регистрация
Восстановить пароль
 
WebMacTep
 Аватар для WebMacTep
21 / 21 / 1
Регистрация: 03.10.2013
Сообщений: 128
#1

Не работает реверс строки - C++

07.01.2014, 16:47. Просмотров 343. Ответов 5
Метки нет (Все метки)

Всем привет, ребятки! Я тут принялся работать с функциями обработки строк, и у меня возник вопрос. Вот вам сначала мой код:

Кликните здесь для просмотра всего текста
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 <cstdio>
#include <cstring>
 
using namespace std;
 
int main()
{
    char first[10];
    char second[10];
 
    int i;
    int j = 0;
 
    gets(first);
 
    for (i = strlen(first) - 1; i >= 0; i--, j++)
    {
        second[j] = first[i];
    }
 
    cout << first << endl << second;
 
    return 0;
}

По моим соображениям должно происходить так:
1. вводим строку first
2. строка second становится зеркальным её отражением
3. выводится строка first и её зеркальное отражение (second)

Но вот на практике у меня выходит какая-то ерунда.

Может, подскажете, где ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 16:47     Не работает реверс строки
Посмотрите здесь:

Функция и реверс строки C++
Реверс строки C++
Реверс строки через итераторы C++
C++ Бит реверс
C++ Реверс массива
Реверс списка C++
Реверс строки в стиле Си C++
C++ Реверс в файлах
C++ Реверс строки
Реверс строки в обратно алфавитном порядке C++
C++ Сделать реверс строки и каждый четвёртый символ выкинуть
Строки, работа с файлом. Реверс и циклический сдвиг в словах C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
07.01.2014, 16:58     Не работает реверс строки #2
можно так(но тогда нужно еще следить, чтобы строка не была длиннее 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
#include <iostream>
#include <cstdio>
#include <cstring>
 
using namespace std;
 
int main()
{
    char first[10];
    char second[10];
 
    int i;
    int j = 0;
 
    gets(first);
 
    for (i = strlen(first) - 1; i >= 0; i--, j++)
    {
        second[j] = first[i];
        second[j+1] = '\0';
    }
 
    cout << first << endl << second;
 
    return 0;
}
я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string first;
    string second;
 
    cin >> first;
 
    second.resize(first.size());
    for(int i=first.size()-1, j=0; i>=0; i--, j++)
        second[j]=first[i];
 
    cout << first << endl << second;
 
    return 0;
}
MihaniX
 Аватар для MihaniX
134 / 44 / 1
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
07.01.2014, 17:02     Не работает реверс строки #3
Только хотел отправить тоже самое что и Вы, но меня опередили)
WebMacTep
 Аватар для WebMacTep
21 / 21 / 1
Регистрация: 03.10.2013
Сообщений: 128
07.01.2014, 17:03  [ТС]     Не работает реверс строки #4
TrueBit, ага, спасибо. А я правильно понял, что здесь вы заменяете следующий символ после отражённого символом конца строки?
C++
1
2
second[j] = first[i];
second[j+1] = '\0';
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
07.01.2014, 17:07     Не работает реверс строки #5
Цитата Сообщение от WebMacTep Посмотреть сообщение
TrueBit, ага, спасибо. А я правильно понял, что здесь вы заменяете следующий символ после отражённого символом конца строки?
C++
1
2
second[j] = first[i];
second[j+1] = '\0';
Да. Можно было и после цикла(строка не должна быть более 9 символов для таких массивов. последний элемент под '\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
24
#include <iostream>
#include <cstdio>
#include <cstring>
 
using namespace std;
 
int main()
{
    char first[10];
    char second[10];
 
    int i;
    int j = 0;
 
    gets(first);
 
    for (i = strlen(first) - 1; i >= 0; i--, j++)
        second[j] = first[i];
    second[j] = '\0';
    
    cout << first << endl << second;
 
    return 0;
}
WebMacTep
 Аватар для WebMacTep
21 / 21 / 1
Регистрация: 03.10.2013
Сообщений: 128
07.01.2014, 17:09  [ТС]     Не работает реверс строки #6
TrueBit, вдвойне спасибо!
Yandex
Объявления
07.01.2014, 17:09     Не работает реверс строки
Ответ Создать тему
Опции темы

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