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

Сдвиг символов строки вправо - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Нубик_я
0 / 0 / 0
Регистрация: 12.03.2012
Сообщений: 22
20.09.2013, 09:08     Сдвиг символов строки вправо #1
собственно задача - сдвинуть строку на 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
void main()
{
    char a[66];
    char b[66];
    char l,c,y;
    int i=0;
    setlocale(LC_ALL,"");
    for (l='А'; l<='я'; l++)
    {
        a[i]=l;
        i++;
    }
    i=0;
    c='А';
    for (i=0;i<=66;i++)
    {
        y=c+2;
        b[i]=y;
        c++;
    }   
    cout<<b<<endl;
    system("pause");
}
беда в том, что первые 2 символа теряются, как их вернуть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.09.2013, 10:36     Сдвиг символов строки вправо #2
Есть стандартный алгоритм std::rotate
Возможная реализация по ссылке http://www.cplusplus.com/reference/algorithm/rotate/
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
20.09.2013, 10:48     Сдвиг символов строки вправо #3
Цитата Сообщение от Нубик_я Посмотреть сообщение
беда в том, что первые 2 символа теряются, как их вернуть?
запомните их в промежуточной переменной, а потом вставьте в хвост.
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
20.09.2013, 11:12     Сдвиг символов строки вправо #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
#include <clocale>
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"");
    char a[64];
    int i=0;
    for (char l='А'; l<='я'; l++)
    {
        a[i]=l;
        i++;
    }
    cout<<a<<endl;
    for (i=63;i>1;i--)
    {
        a[i]=a[i-2];
    }
    a[0]=a[1]=' ';
 
    cout<<a<<endl;
    system("pause");
}
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
20.09.2013, 11:26     Сдвиг символов строки вправо #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
32
#include <clocale>
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"");
    char a[67]; //не забываем про символ конца строки
    char b[3];
    int i=0;
    for (char l='А'; l<='я'; l++)
    {
        a[i]=l;
        i++;
    }
     a[66]=0; //или a[66]='\0';
    cout<<a<<endl;
    b[0]=a[64];
    b[1]=a[65];
    b[2]=0;
    for (i=65;i>1;i--)
    {
        a[i]=a[i-2];
    }
    a[0]=b[0];
   a[1]=b[1];
 
    cout<<a<<endl;
    system("pause");
}
strcmp75
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
04.10.2014, 22:09     Сдвиг символов строки вправо #6
Всем добрый день. Срочно нужна помощь. Кто подскажет, как выполнить такое задание?
"Ввести строки s1 и s2. Три последних символа строки s2 удалить, вставить в середину строки s1 и в полученной строке заменить все символы 'E' на 'EE'."
Вот моя программа, но работает она из рук вон неправильно - выводит только первые символы строки s1 после обработки. Вывод промежуточных результатов и конечных строк пока не делал. Помогите, очень срочно, сам уже две недели тружусь и ничего не выходит
Работаю в Borland C++ версия 3.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
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main()
{const int max = 61;
 char s1[max+3], s2[max], cpy_s2[3];
 int i = 0;
 clrscr();
 printf("Vvedite stroku s1:\n");
 gets(s1);
 printf("Vvedite stroku s2:\n");
 gets(s2);
 int lens1 = strlen(s1); //zapis znachenia dliny stroki s1
 int lens2 = strlen(s2); //i s2
 if((lens2<3)||(lens1==0)||(lens2==0))
   {printf("\nOshibka vvoda strok!");
    printf("\nNazhmite Enter dla vixoda");
    getch();
   }
 else
     {
     {for(i = lens2-3; i<=lens2; i++) //cikl na poisk poslednix 3-x simvolov v "s2"
     {cpy_s2[i] = s2[i]; //kopirovanie 3-x simvolov v otdelniy massiv
      s2[i] = '\0'; //"udalenie" 3-x simvolov iz na4alnoi stroki "s2"
     }
     for(i = lens1/2; i<=lens1/2+3; i++)
    {s1[i+3] = s1[i];
    }
     for(i = lens1/2; i<=lens1/2+3; i++)
    {s1[i] = cpy_s2[i];
    }
    for(i = 0; i<=lens1; i++)
       {if(s1[i]=='E')
         s1[i] = 'EE';
       }
    printf("\nObrabotannaya stroka s1:\n");
    puts(s1);
    printf("Nazhmite Enter dla vixoda");
    getch();
      }
     }
}
Yandex
Объявления
04.10.2014, 22:09     Сдвиг символов строки вправо
Ответ Создать тему
Опции темы

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