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

Перестановка местами два участка строки - C++

Восстановить пароль Регистрация
 
Frai32
2 / 2 / 0
Регистрация: 24.08.2013
Сообщений: 134
29.01.2014, 11:06     Перестановка местами два участка строки #1
Есть область памяти (строка), условно поделенная на две части A и B. Область
B идет сразу после A. Заданы длины обоих частей. Используйте рекурсивный
reverse(), чтобы поменять a и b местами. Решение не требует рекурсии, кроме
той, что в reverse().

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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string.h>
#include <conio.h>
 
 
void reverse(char* s, size_t len);
 
 
int main()
{
 
    char test1[] = "123456789";
 
    std::cout << test1 << std::endl;
 
    size_t len = (strlen(test1)/sizeof(test1[1]))-1;
  
    reverse(test1, len);
 
    std::cout << test1 << std::endl;
    getch();
    
    return 0;
 
 
}
 
void reverse(char* s, size_t len)
{
    static size_t len_old = len/2;  //находим первую половину длины строки
   
    
    //переменные для записи символов размер равен половине от главного массива
    char* a = new char[len_old];
    char* b = new char[len_old];
    
    for(size_t i=0; i < len_old; ++i)
     a[i] = s[i];
     
    a[len_old]='\0';
    
     for(size_t i=0; i < len_old; ++i)
        b[i] = s[i+len_old];
        
    strcpy(s,b);
    
}
на место первой части ставится вторая, а вместо первой появляется знак "-".В чём может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 11:06     Перестановка местами два участка строки
Посмотрите здесь:

поменять местами два элемента n и 1 на С++ C++
Перестановка строки. C++
Поменять местами два полуслова C++
C++ Перестановка символов строки
Перестановка элементов каждой строки в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
school_bot
14 / 12 / 3
Регистрация: 23.12.2013
Сообщений: 84
29.01.2014, 11:21     Перестановка местами два участка строки #2
Цитата Сообщение от Frai32 Посмотреть сообщение
C++
1
2
3
for(size_t i=0; i < len_old; ++i)
     b[i] = s[i+len_old];
strcpy(s,b);
во-первых, надо использовать во втором массиве len-len_old, так как если len = 9, то len_old + len_old = 8
во-вторых, не хватает символа конца строки у b.
в-третьих, почему вы делаете strcpy(s,b);
вы копируете вторую часть в главную. естественно, пропадет первая часть
Frai32
2 / 2 / 0
Регистрация: 24.08.2013
Сообщений: 134
29.01.2014, 14:20  [ТС]     Перестановка местами два участка строки #3
А как тогда нужно копировать?
school_bot
14 / 12 / 3
Регистрация: 23.12.2013
Сообщений: 84
29.01.2014, 14:23     Перестановка местами два участка строки #4
Цитата Сообщение от Frai32 Посмотреть сообщение
А как тогда нужно копировать?
создайте полноценную строку из a и b, скопировав из a все символы до '\0', и после аналогично из b. и добавьте в конец '\0'. а затем strcpy
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
29.01.2014, 14:27     Перестановка местами два участка строки #5
Frai32, можно скопировать через третью строку...
C++
1
2
3
4
5
6
char a[20], b[20], q[20];
for(int i(0); i<20; i++){
q[i]=a[i];
a[i]=b[i];
b[i]=q[i];
}
Yandex
Объявления
29.01.2014, 14:27     Перестановка местами два участка строки
Ответ Создать тему
Опции темы

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