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

Программа выводящая строку наоборот - C++

Восстановить пароль Регистрация
 
Sherlock-Holmes
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
12.04.2014, 12:28     Программа выводящая строку наоборот #1
Необходимо сделать программу, с функцией, сперва меняющей местами первую и последнюю букву строки, после вторую и т.д. Функция main() должна вызывать эту функцию и выводить готовую строку. Главное условие: не пользоваться специальными функциями, а создать собственную.
Вот программа, которая не выводит готовую строку, что я сделал не так?

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
34
#include <iostream>
#include <cstdio>
#include <cstring>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
void reversit(char *str)
{
    int x = strlen(str);
    char word;
    
    for (int i = 0; i < x; i++)
    {
        word = str[i];
        str[i] = str[x-i];
        str[x-i] = word;
    }
cout <<str;
}
 
int main ()
{
    setlocale(0, "UTF-8");
    char str[80];
    cout << "Enter string: \n";
    gets(str);
    reversit(str);
    cout <<str;
 
    _getch ();
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2014, 12:28     Программа выводящая строку наоборот
Посмотрите здесь:

C++ Программа, выводящая прописью чётные числа массива.
Программа выводящая слова и их количество. C++
C++ Программа, считывающая заданный текстовый файл и выводящая на экран, а также дописывающая в новую строку в конец этого файла...
C++ не запускается программа, выводящая содержимое файла
Не работает код (программа считывает из файла строку, убирает лишние пробелы и записывает в другой файл строку, словами наоборот) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
12.04.2014, 13:00     Программа выводящая строку наоборот #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sherlock-Holmes Посмотреть сообщение
str[x-i] = word;
1.При первом первом проходе ты заменишь терминальный ноль.
2.Нужно доходить до середины, а ты доходишь до конца. Т.е. ты меняешь символы 1 с последним, потом 2 с предпоследним. а потом делаешь это опять, т.е. символы опять на свои места становятся.

Добавлено через 29 секунд
Можно сделать так, но это костыль какой-то:
Кликните здесь для просмотра всего текста
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
34
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstring>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
void reversit(char *str)
{
    int x = strlen(str)-1;
    char word;
 
    for (int i = 0; i < x/2+1; i++)
    {
        word = str[i];
        str[i] = str[x - i];
        str[x - i] = word;
    }
    cout << str;
}
 
int main()
{
    setlocale(0, "UTF-8");
    char str[80];
    cout << "Enter string: \n";
    gets(str);
    reversit(str);
    
    _getch();
    return 0;
}
Sherlock-Holmes
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
12.04.2014, 13:01  [ТС]     Программа выводящая строку наоборот #3
MarVaL, я пробовал доходить до середины приблизительно таким способом:
C++
1
if (x/2 == 2) break;
Однако все равно ничего не получилось.
А вот про терминальный ноль можно пожалуйста поподробнее?
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
12.04.2014, 13:02     Программа выводящая строку наоборот #4
Вообще вот так делается:
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstring>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
void reversit(char *str)
{
    for (int i = 0, j = strlen(str) - 1; i < j; ++i, --j)
    {
        int tmp = str[i];
        str[i]  = str[j];
        str[j]  = tmp;
    }
    cout << str << endl;
}
 
int main()
{
    setlocale(0, "UTF-8");
    char str[80];
    cout << "Enter string: \n";
    gets(str);
    reversit(str);
    
    _getch();
    return 0;
}
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
12.04.2014, 13:05     Программа выводящая строку наоборот #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
void reversit(char *str)
{
    int x = strlen(str);
    char word;
 
    for (int i = 0; 2*i < x; i++)
    {
        word = str[i];
        str[i] = str[x - i - 1];
        str[x - i -1] = word;
    }
}
Sherlock-Holmes
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
12.04.2014, 13:06  [ТС]     Программа выводящая строку наоборот #6
Спасибо, получается. Правда я понять не могу, почему программа не работала когда я пытался применить if...
Еще раз спасибо!
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
12.04.2014, 13:06     Программа выводящая строку наоборот #7
Цитата Сообщение от Sherlock-Holmes Посмотреть сообщение
А вот про терминальный ноль можно пожалуйста поподробнее?
Ну вот смотри, у тебя длина строки
C++
1
len = strlen(str); // допустим так
Но это длина строки не считая нуль-символа(ограничителя кому как), И в c++ индексация начинается с нуля, т.е. реальные символы которые находятся в строке находятся в [0,len-1], а в str[len] - находится терминальный ноль.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2014, 13:08     Программа выводящая строку наоборот
Еще ссылки по теме:

C++ Задача на вычисление суммы и программа выводящая на экран таблицу
Программа выводящая имена файлов в каталоге C++

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

Или воспользуйтесь поиском по форуму:
Sherlock-Holmes
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
12.04.2014, 13:08  [ТС]     Программа выводящая строку наоборот #8
MarVaL, понятно. Теперь ясно как это делается. Спасибо!
Yandex
Объявления
12.04.2014, 13:08     Программа выводящая строку наоборот
Ответ Создать тему
Опции темы

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