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

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

Восстановить пароль Регистрация
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
17.03.2013, 21:27     Поменять порядок символов в строке #1
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;
}
Написать функцию, принимающую строку, меняющую порядок символов в ней на обратный и вывадящий на экран преобразованную строку и длину.

В чем у меня ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Поменять порядок символов в строке  
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
17.03.2013, 21:38     Поменять порядок символов в строке #3
Цитата Сообщение от kukhtikov Посмотреть сообщение
st[len-i]
i = 0;
st[len] ?
-=ЮрА=-
Заблокирован
Автор 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;
}
Отработка таже
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Поменять порядок символов в строке  
-=ЮрА=-
Заблокирован
Автор FAQ
17.03.2013, 21:44     Поменять порядок символов в строке #6
Цитата Сообщение от kukhtikov Посмотреть сообщение
В чем у меня ошибка?
Цитата Сообщение от kukhtikov Посмотреть сообщение
for(int i=0;i<len / 2;i++)
- ОГРОМНЕЙШАЯ ОШИБКА
об индексации уже сказал m1Rr0r.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 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;
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
17.03.2013, 22:06     Поменять порядок символов в строке #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cout<<"Output: "<<strrev(text)<<endl;
Утечку памяти здесь случайно не получите?

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 23:33     Поменять порядок символов в строке
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор 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
Yandex
Объявления
17.03.2013, 23:33     Поменять порядок символов в строке
Ответ Создать тему
Опции темы

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