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

Поменять местами 2 половины строки // С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
hak555
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 4
30.09.2011, 23:37     Поменять местами 2 половины строки // С++ #1
Всем привет.
Visual C++.
Задание: На входе строка. Необходимо разделить её на 2 равные части, и поменять их местами. Например "abcdefghijklmnopq" ->"jklmnopqabcdefghi"

Вот, что я написал:
Код
#include <stdio.h>
int main()
{
	int i=0,r=0;
	char s[50],k;

	printf("Vvedite stroku: ");
	scanf("%S",&s);
	printf("\n");

	r=strlen(s);
	for (i=0; i=r/2; i++)
		{
			k=s[i];
			s[i]=s[r-i];
			s[r-i]=k;
		}

	printf("Otvet: ",s,"\n");
}
По непонятной мне причине программа не работает. То есть запускается без ошибок, даёт возможность ввести первоначальную строку, выводит надпись "ответ", однако искомую строку (т.е. с уже переставленными половинками) не выводит.

Буду благодарен любой помощи в исправлении.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2011, 23:37     Поменять местами 2 половины строки // С++
Посмотрите здесь:

Ввести число с клавиатуры поменять местами старшую и младшую половины C++
C++ Поменять местами первую и вторую половины массива
Столбцы левой половины массива поменять местами со столбцами правой половины C++
поменять местами две половины очереди местами C++
C++ 7. Дана матрица размера M × N (M — четное число). Поменять местами верхнюю и нижнюю половины матрицы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.09.2011, 23:43     Поменять местами 2 половины строки // С++ #2
C
1
printf("Otvet: %s\n",s)
hak555
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 4
30.09.2011, 23:46  [ТС]     Поменять местами 2 половины строки // С++ #3
Спасибо, но теперь почему-то в ответе выводится только первая цифра строки, причём не той, которую нужно найти, а исходной.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
30.09.2011, 23:49     Поменять местами 2 половины строки // С++ #4
Цитата Сообщение от hak555 Посмотреть сообщение
C
1
2
3
4
5
for (i=0; i=r/2; i++) {
     k=s[i];
     s[i]=s[r-i];
     s[r-i]=k;
}
hak555, алгоритм проработайте, он неверный и выходит за границу массива.
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
30.09.2011, 23:58     Поменять местами 2 половины строки // С++ #5
C
1
2
3
4
...................
r=strlen(s) - 1;
for (i=0; i<r/2; i++)
....................
hak555
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 4
01.10.2011, 00:53  [ТС]     Поменять местами 2 половины строки // С++ #6
Цитата Сообщение от x1Mike7x Посмотреть сообщение
C
1
2
3
4
...................
r=strlen(s) - 1;
for (i=0; i<r/2; i++)
....................
Насчёт "-1" да, тупка связана с недавним началом изучения С++, забыл, что с 0 начинается нумерация)
i<r/2 спасибо, очепятка вышла.

Но, к сожалению, программа всё также продолжает выдавать в ответе первый символ введённой строки...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
01.10.2011, 01:05     Поменять местами 2 половины строки // С++ #7
Цитата Сообщение от hak555 Посмотреть сообщение
Но, к сожалению, программа всё также продолжает выдавать в ответе первый символ введённой строки...
покажите код, убедитесь что строка считывается
C
1
2
scanf("%s",&s);
printf("Otvet: %s\n",s);
hak555
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 4
01.10.2011, 01:10  [ТС]     Поменять местами 2 половины строки // С++ #8
Регистр!!11 В сканф вместо строчной буквы после % написал заглавную. Всё никак не могу после паскаля привыкнуть к тому, что строчные и заглавные буквы это не одно и то же)
x1Mike7x, и, в особенности, alkagolik, спасибо огромное за помощь!

Выложу итоговый код, может кому-нибудь пригодится.

Код
#include <stdio.h>
int main()
{
	int i=0,r=0;
	char s[50],k;

	printf("Vvedite stroku: ");
	scanf("%s",&s);
	printf("\n");

	r=strlen(s)-1;
	for (i=0; i<r/2; i++)
		{
			k=s[i];
			s[i]=s[r-i];
			s[r-i]=k;
		}

	printf("Otvet: %s\n",s);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2011, 01:42     Поменять местами 2 половины строки // С++
Еще ссылки по теме:

Поменять местами левую и правую половины матрицы C++
Дан массив. Поменять местами его первую и вторую половины массива C++
C++ Дано слово из четного числа букв. Поменять местами его половины

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
01.10.2011, 01:42     Поменять местами 2 половины строки // С++ #9
hak555, держите
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    int i = 0, r;
    char str[51], tmp[26] = {'\0'}, k;
 
    printf("Vvedite stroku: ");
    scanf("%s",&str);
 
    printf("\n");
    r=strlen(str);
 
    strncpy(tmp, str, r / 2);
    i = 0;
    while(str[i])
        str[i++] = str[i + r / 2];
 
    strcat(str, tmp);
    printf("Otvet: %s\n",str);
 
    return 0;
}
подкорректировал строку 14
Yandex
Объявления
01.10.2011, 01:42     Поменять местами 2 половины строки // С++
Ответ Создать тему
Опции темы

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