Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
#1

Поменять порядок символов в строке - C++

17.03.2013, 21:27. Просмотров 1391. Ответов 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
30
31
32
33
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
 
void funct(char*);
 
void funct(char* st)
{
    int len=strlen(st);
    for(int i=0;i<len;i++)
    {
        char temp;
        temp=st[i];
        st[i]=st[len-i];
        st[len-i]=temp;
    }
    printf("\nПреобразованная строка: %s", st);
    printf("Длина строки: %d", len);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    char stt[255];
    printf("Введите строку: ");
    scanf("%s", &stt);
    printf("\n%s", stt);
    funct(stt);
    _getch();
    return 0;
}
Написать функцию, принимающую строку, меняющую порядок символов в ней на обратный и вывадящий на экран преобразованную строку и длину.

В чем у меня ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять порядок символов в строке (C++):

Поменять порядок следования символов строки на обратный - C++
Всем привет помогите пожалуйста.Решить задачу: поменять порядок следования символов данной строки на обратный. Например, для строки «Мама...

Строка: Изменить порядок символов в строке на обратный - C++
Напишите программу, которая изменяет порядок символов в строке на обратный. Использование функции strlen() из библиотеки string.c...

Напишите программу, изменяющую порядок символов в строке на обратный - C++
Напишите программу, которая изменяет порядок символов в строке на обратный. Использование функции strlen() из библиотеки string.c...

При выполнении определенного условия поменять порядок следования символов строки на противоположный - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Если второе слово первой строки такое же, как второе слово второй строки, то...

В каждой строке текста из файла сменить порядок символов на противоположный - C++
Всем привет. Помогите пожалуйста с кодом. В общем, надо прочитать из файла символы и сменить их порядок. Прочитать то я прочитал а вот...

Поменять в строке несколько символов на один символ - C++
Здравствуйте. Нужно поменять в строке несколько символов на один символ. #include &lt;iostream&gt; #include &lt;string.h&gt; #include...

8
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 21:37 #2
Начнём с простого со стандартных функций strrev и std::reverse
C++
1
2
3
4
5
6
7
8
9
10
11
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    char text[] = "This is the test of program";
    cout<<"Input : "<<text<<endl;
    cout<<"Output: "<<strrev(text)<<endl;
    return 0;
}
0
Миниатюры
Поменять порядок символов в строке  
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
17.03.2013, 21:38 #3
Цитата Сообщение от kukhtikov Посмотреть сообщение
st[len-i]
i = 0;
st[len] ?
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 21:38 #4
std::reverse
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
 
string RevStr(string str)
{
    if(str.length())
        reverse(str.begin(), str.end());
    return str;
}
 
int main()
{
    string text = "This is the test of program";
    cout<<"Input : "<<text<<endl;
    cout<<"Output: "<<RevStr(text)<<endl;
    return 0;
}
Отработка таже
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 21:43 #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
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
long GetLen(char * str)
{
    int len = 0;
    while(str[len])
        len++;
    return len;
}
 
char * RevStr(char * str)
{
    int len = GetLen(str);
    for(int i = 0; i < len / 2; i++)
    {
        //Обмен без буффера
        str[i] += str[(len - 1) - i];
        str[(len - 1) - i] = str[i] - str[(len - 1) - i];
        str[i]             = str[i] - str[(len - 1) - i];
    }
    return str;
}
 
int main()
{
    char text[] = "Text for reverse operation";
    cout<<"Input : "<<text<<endl;
    cout<<"Output: "<<RevStr(text)<<endl;
    return 0;
}
2
Миниатюры
Поменять порядок символов в строке  
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 21:44 #6
Цитата Сообщение от kukhtikov Посмотреть сообщение
В чем у меня ошибка?
Цитата Сообщение от kukhtikov Посмотреть сообщение
for(int i=0;i<len / 2;i++)
- ОГРОМНЕЙШАЯ ОШИБКА
об индексации уже сказал m1Rr0r.
1
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
17.03.2013, 21:47 #7
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 "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
 
void funct(char*);
 
void funct(char* st)
{
    char temp;
    int len=strlen(st);
    for(int i = 0; i < len / 2; i++)
    {
        temp = st[i];
        st[i] = st[len - (i + 1)];
        st[len - (i + 1)] = temp;
    }
    printf("\nПреобразованная строка: %s", st);
    printf("\nДлина строки: %d", len);
}
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus");
    char stt[255];
    printf("Введите строку: ");
    scanf("%s", &stt);
    printf("Введенная строка: %s", stt);
    funct(stt);
    _getch();
    return 0;
}
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.03.2013, 22:06 #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cout<<"Output: "<<strrev(text)<<endl;
Утечку памяти здесь случайно не получите?

Добавлено через 2 минуты

Не по теме:

Функция не стандартная потестить не могу, но если верить этому описанию http://devoid.com.ua/functions-about/c-functions/strrev.html, то получим утечку памяти)

1
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 23:33 #9
go, в качетсве юзергайда почитай эти линки
http://msdn.microsoft.com/en-us/library/ms235404.aspx
http://msdn.microsoft.com/en-us/library/9hby7w40.aspx

Не по теме:

PS:под спойлером


Кликните здесь для просмотра всего текста
Если прозрения на тебя после линков не снезойдёт, вот асм - найдёшь там утечку свистни
Assembler
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
--- intel\strrev.asm  -------------------------------------------------------------------------------------------------------------------------------------
_strrev:
00417060   push        ebp
00417061   mov         ebp,esp
00417063   push        edi
00417064   push        esi
00417065   mov         edi,dword ptr [string]
00417068   mov         edx,edi
0041706A   mov         esi,edi
0041706C   xor         eax,eax
0041706E   or          ecx,0FFh
00417071   repne scas  byte ptr [edi]
00417073   cmp         ecx,0FEh
00417076   je          done (0041708a)
00417078   dec         edi
00417079   dec         edi
lupe:
0041707A   cmp         esi,edi
0041707C   jae         done (0041708a)
0041707E   mov         ah,byte ptr [esi]
00417080   mov         al,byte ptr [edi]
00417082   mov         byte ptr [esi],al
00417084   mov         byte ptr [edi],ah
00417086   inc         esi
00417087   dec         edi
00417088   jmp         lupe (0041707a)
done:
0041708A   mov         eax,edx
0041708C   pop         esi
0041708D   pop         edi
0041708E   leave
0041708F   ret
1
17.03.2013, 23:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 23:33
Привет! Вот еще темы с ответами:

В строке символов поменять местами символы на четных и нечетных позициях - C++
В строке символов поменять местами символы на четных и нечетных позициях.

Поменять в введенном с клавиатуры строке символов подряд заданный символ на другой заданный символ - C++
Поменять в введенном с клавиатуры строке символов подряд заданный символ на другой заданный символ.

поменять порядок цифр... - C++
Дано натуральное n. Поменять порядок цифр числа n на обратный.

Поменять порядок цифр на обратный - C++
Дано целое число X. Поменять порядок цифр числа на обратный. в c++ не бум бум Х__х


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.