hchaithanya Ответов: 2

Сдвиг символов строки влево на x бит, указанный пользователем


Я пытаюсь сдвинуть символы строки влево на x битов, указанных пользователем. Операция переключения работает не так, как хотелось бы.

Что я уже пробовал:

#include <iostream>
#include <stdio.h>
using namespace std;

void display(char *name, int l)
{
	int i;
	for(i=0;i<=l;i++)
		cout<<name[i];
}
void shiftop(char *name, int shiftbit, int l) //l=stringlength
{
 int sb,i=1;
 char temp;
 
 for(sb=shiftbit+1;sb<=l;sb++)
 {
 	temp=name[i];
 	name[i]=name[sb];
 	name[sb]=temp;
 	i++;

 }
 display(name,l);
}
int main(){

int l,s;
char name[30];
cout<<"Enter the string";
gets(name);
cout<<"shift bit ";
cin>>s;
l=sizeof(name);
shiftop(name,s,l);

}

CPallini

Каково именно ваше требование? Пожалуйста, приведите пример входных данных и ожидаемых результатов.

Dave Kreskowiak

"Не работает так, как хотелось бы" - это не правильное описание проблемы. Каков вход, каков ожидаемый выход и что вы получили?

2 Ответов

Рейтинг:
2

OriginalGriff

Это потому, что ваш код не имеет ничего общего с битами: он меняет местами символы, вот и все. Сдвиг битов - это процесс перемещения данных внутри байта и, возможно, между байтами.
Так что если вы начинаете со значением 42 - шестигранный 2А, Бинарные 00101010, и его сдвиг влево на 2 бита, вы получаете бинарные 10101000 - шестигранный А8, десятичных 168 - и два нулевых битов для вставки в нижней части предыдущего байта, когда вы переносите то, что.

То, что делает этот код, - это просто замена целых символов, и это совсем не то, что вам нужно.
Посмотрите на << и & двоичные операторы, но для этого вам понадобятся неподписанные символы.


Рейтинг:
2

Patrice T

Цитата:
Операция переключения работает не так, как хотелось бы.

Это не информативно ! Мы понятия не имеем о том, чего хотим. Код, который вы показываете, не связан со сдвигом битов.
Только вы знаете, что нужно, используйте отладчик, чтобы увидеть, что делает ваш код, он может помочь вам увидеть, что не так.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.