6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
1

Программа реверса строки: почему на экран выводится мусор, вместо нужного текста?

09.12.2016, 13:24. Показов 1886. Ответов 13
Метки нет (Все метки)

Пишу программу реверса строки (меняет местами первый символ и последний, второй и предпоследний и т.д.).
На экран выводится мусор, вместо нужного текста, почему?
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
// First.cpp : Defines the entry point for the console application.
//
 
 
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    char string[] = "this is string - "; // объявление и инициализация строки
    cout << "Enter the string: ";
    char in_string[500]; // строковый массив для ввода 
    gets_s(in_string); // функция gets() считывает все введённые символы с пробелами до тех пор, пока не будет нажата клавиша Enter 
 
    for (int i = 0; i < strlen(in_string); i++) // может неправильный цикл для прохода по строке?
    {   
        in_string[i] = in_string[i - 1]; //присваиваю первому символу последний и так далее.
    }
 
    cout << string << in_string << endl; // вывод строкового значения
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 13:24
Ответы с готовыми решениями:

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

Почему место вывода значений переменных родительского класса выводится мусор
Хочу вывести значение переменной из родительского класса в классе-наследнике , при этом выводит...

Выводится мусор в конце строки
При выводе вместе с нужным значением выводится мусор #include &quot;stdafx.h&quot; long int len1(char*adr)...

Отображается кода вместо нужного текста
Здравствуйте. У меня совсем идиотский вопрос, только начал изучать PHP путем видеогайдов, по...

13
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
09.12.2016, 13:41 2
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

Конечно неправильный цикл. В цикле нужно явно указывать позиции последних символов и использовать временную переменную для обмена местами символов. Также, всю длину строки проходить не нужно.
C++
1
2
3
4
5
6
for (int i = 0; i < strlen(in_string) / 2; i++)
    {
        char temp = in_string[i];
        in_string[i] = in_string[strlen(in_string) - i - 1];
        in_string[strlen(in_string) - i - 1] = temp;
    }
1
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 13:47  [ТС] 3
да,спасибо
я пришел еще к такому решению со swap():
C++
1
2
3
4
5
6
7
8
    int len = strlen(in_string);
 
    for (int i = 0; i<len / 2; ++i)
    {
        swap(in_string[i], in_string[len - 1 - i]);
 
    }
    cout << in_string;
но Ваше наглядней.
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 856
09.12.2016, 13:58 4
Может вам рекурсию лучше применить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void StrReverseRecursion(long i, char * str);
 
int main(int argc, char* argv[])
{
    cout << "String reverse using recursion function" << endl;
    char str[] = "Hello World!";
    StrReverseRecursion(strlen(str) - 1, str);
    cout << endl;
    system("pause");
    return 0;
}
 
void StrReverseRecursion(long i, char * str)
{
    cout << str[i];
    if (-1 < (i = i - 1))
        StrReverseRecursion(i, str);
}
Добавлено через 2 минуты
Классический цикл:
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
33
#include <iostream>
using namespace std;
 
void StrReverse(char* str);
 
int main(int argc, char* argv[])
{
    char inputString[255];
    cout << "String reverse programm" << endl;
    cout << "Enter string please ->" << endl;
    cin.getline(inputString, 255);
    StrReverse(inputString);
    cout << inputString << endl;
    system("pause");
    return 0;
}
 
void StrReverse(char* str)
{
        char tmp;
        int i = 0;
        int size = 0;
        for (size = 0; str[size] != '\0'; size++);
        size--;
        while (i <= size)
        {
            tmp = str[i];
            str[i] = str[size];
            str[size] = tmp;
            size--;
            i++;
        }
}
1
Любитель чаепитий
3726 / 1786 / 561
Регистрация: 24.08.2014
Сообщений: 5,983
Записей в блоге: 1
09.12.2016, 14:35 5
C++
1
2
3
4
5
6
7
8
9
10
/////////////////////////////////////////////////////////////////////////////////////////
#include <string>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::string str{ "asd" };
    std::string revStr{ str.rbegin(), str.rend() };
    std::cout << revStr << std::endl;
}
3
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 856
09.12.2016, 14:43 6
Это STL?
0
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
09.12.2016, 14:46  [ТС] 7
спасибо за ответы
может, кто-нибудь эту темку посмотрит?
Построчная запись в файл
мучаюсь второй день уже
0
Любитель чаепитий
3726 / 1786 / 561
Регистрация: 24.08.2014
Сообщений: 5,983
Записей в блоге: 1
09.12.2016, 14:46 8
Цитата Сообщение от Jman Посмотреть сообщение
Это STL?
Да.
0
sourcerer
09.12.2016, 19:31
  #9

Не по теме:

Цитата Сообщение от Jman Посмотреть сообщение
Это STL?
Цитата Сообщение от GbaLog- Посмотреть сообщение
Да.
И она любит тебя :D

0
803 / 530 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
09.12.2016, 19:40 10
Aecttann,
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
int main()
{
    string str("asd");
    cout << (reverse(str.begin(), str.end()), str) << endl;
}
3
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
09.12.2016, 19:42 11
Ferrari F1, у GbaLog- красивше
0
803 / 530 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
09.12.2016, 19:43 12
gru74ik, )))
0
Aecttann
09.12.2016, 19:45  [ТС]
  #13

Не по теме:

прям пособие как превратить 100 строк кода в 10:D

0
Эксперт CЭксперт С++
5084 / 2269 / 332
Регистрация: 20.02.2013
Сообщений: 5,598
Записей в блоге: 19
09.12.2016, 19:51 14
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <iterator>
 
int main()
{
    std::string str = "redrum"; // Да, я только вчера посмотрел "Сияние" по Стивену Кингу.
    std::copy( str.rbegin(), str.rend(), std::ostream_iterator<char>( std::cout, "" ) );
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2016, 19:51
Помогаю со студенческими работами здесь

Выводится мусор в конце строки при использовании wprintf()
Ну собственно вот: #define UNICODE #define _UNICODE #include &lt;stdio.h&gt; #include &lt;conio.h&gt;...

Почему вместо 2 выводится белеберда?
// mamalclass.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot;...

Почему вместо 1.5 выводится 1.500000?
Вот в этом коде вместо цифр в tablica выводится что-то страшное =) #include &lt;stdio.h&gt; #include...

Почему вместо перехода на следующую строку выводится /n
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int...


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

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

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