• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed przesunięcie stringa

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
294 wizyt
pytanie zadane 21 kwietnia 2020 w C i C++ przez tomes235 Początkujący (320 p.)
zamknięte 21 kwietnia 2020 przez tomes235

Mam pytanko, otóż próbuję przesunąć liczbę binarną o k-miejsc( w mojej funkcji przesuniecie). Lecz wyświetla błędną liczbę, co może być źle?

#include<iostream>
#include<string>

using namespace std;
void zamiana3(int liczba, int przesuniecie) {
	string newbinary = "";
	int unsigned mask = 0x80000000;
	
	string binaryliczba = "";
	while (mask > 0) {
		if ((liczba & mask) != 0) {
			binaryliczba += "1";
		}
		else {
			binaryliczba += "0";
		}
		mask = mask >> 1;
	}
	cout << binaryliczba;
	
	
	for (int i=0; i<= binaryliczba.size()-1; i++) {
		newbinary += binaryliczba[i];
	}
	for (int j=0; j<przesuniecie; j++) {
		newbinary = binaryliczba[(binaryliczba.size() - 1)-przesuniecie] + newbinary;
	}
	cout << newbinary;
}

int main() {
	int liczba;
	int przesuniecie;
	cin >> liczba;
	cin >> przesuniecie;
		zamiana3(liczba,przesuniecie);
}

 

komentarz zamknięcia: Uzyskano odpowiedź

2 odpowiedzi

0 głosów
odpowiedź 21 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)
wybrane 21 kwietnia 2020 przez tomes235
 
Najlepsza

Pomijajac sam kod, nie rozumiem czemu operujesz na stringach zamiast na intach?

#include <iostream>
#include <bitset>

int leftShift (int number, int numberOfShifts) {
    int i = 0;
    while (i < numberOfShifts) {
        number <<= 1;
        i ++;
    }
    return number;
}
int rightShift (int number, int numberOfShifts) {
    int i = 0;
    while (i < numberOfShifts) {
        number >>= 1;
        i ++;
    }
    return number;
}

int main()
{
    int numberToShift = 2;
    int numberOfShifts = 4;
    int shiftedNumber = leftShift(numberToShift, numberOfShifts);
    std::cout << bitset <8> (shiftedNumber) << " normlana: " << shiftedNumber;

    return 0;
}

Taki kod wyglada lepiej niz zabawa stringami

komentarz 21 kwietnia 2020 przez tomes235 Początkujący (320 p.)
problem w tym, że nie zostałem upowazniony do bitseta, a liczba binarna ma byc przesuwana w prawo
komentarz 21 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. tego nie napisales

2. czyli nawet nie mozesz uzyc funkcji konwertuacych int na string?

3. podalem oba warianty i w lewo i w prawo
komentarz 21 kwietnia 2020 przez tomes235 Początkujący (320 p.)
#include<iostream>
#include<string>

using namespace std;
void zamiana3(int liczba, int przesuniecie) {
	string newbinary = "";
	int unsigned mask = 0x80000000;

	string binaryliczba = "";
	while (mask > 0) {
		if ((liczba & mask) != 0) {
			binaryliczba += "1";
		}
		else {
			binaryliczba += "0";
		}
		mask = mask >> 1;
	}
	cout << binaryliczba << endl;


	for (int i = 0; i < binaryliczba.size() - przesuniecie; i++) {

		newbinary += binaryliczba[i];
	}
	for (int j = 0; j < przesuniecie; j++) {
	newbinary = binaryliczba[(binaryliczba.size() - 1)-j] + newbinary;

}
	
	cout << newbinary << endl;
	

}

	

int main() {
	int liczba;
	int przesuniecie;
	cin >> liczba;
	cin >> przesuniecie;
		zamiana3(liczba, przesuniecie);
		
}

wymyslilem cos takiego, takie funkcje moge ale jedynie int i string, ale mysle, ze jest szybszy sposob

komentarz 21 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)
#include<iostream>
#include<string>

using namespace std;
void zamiana3(int liczba, int przesuniecie) {
    for (int i = 0; i < przesuniecie; i ++) {
        liczba >>= 1;
    }
    std::string binary;
    while (liczba > 0) {
        binary.insert(0, 1, (liczba%2 + '/0'));
        liczba /=  2;
    }
    std::cout << binary;
}



int main() {
    int liczba;
    int przesuniecie;
    cin >> liczba;
    cin >> przesuniecie;
    zamiana3(liczba, przesuniecie);

}

 

0 głosów
odpowiedź 21 kwietnia 2020 przez DawidK Nałogowiec (37,910 p.)

dlaczego nie użyjesz operatorów bitowych ( <<    >> ) ?

komentarz 21 kwietnia 2020 przez tomes235 Początkujący (320 p.)
ponieważ moja liczba binarna jest stringiem, a stringa nie można przesuwać w taki sposób, chodzi mi głownie o te fory pomiedzy 22 a 27 linijka, bo to nie działa
komentarz 21 kwietnia 2020 przez DawidK Nałogowiec (37,910 p.)
ale przecież stringa w dosyć łatwy sposób można przekonwertować na inta i odpada cała zabawa z pętlami

Podobne pytania

0 głosów
2 odpowiedzi 479 wizyt
pytanie zadane 12 grudnia 2019 w C i C++ przez Ganci Użytkownik (670 p.)
0 głosów
1 odpowiedź 594 wizyt
pytanie zadane 23 grudnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 2,281 wizyt
pytanie zadane 14 lutego 2018 w C i C++ przez n0s1gnal Użytkownik (700 p.)

93,433 zapytań

142,429 odpowiedzi

322,661 komentarzy

62,796 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...