Я пытался обрезать все начальные / предшествующие нули в двоичном 32-битном числе и распечатать выходные данные по следующим двум кодам, первый из которых показал ошибку, а другой код был успешным:
Я хочу знать, почему первый провалился. пожалуйста, объясните подробно. это будет много значить для меня.
string trimmer(string& binary_str) {
int i=0;// 'i' will finally have the index of the binary string which is having value as '0' and is
// just the preceding zero to the first 1 in the string
while (binary_str.at(i) != 1) {//this will iterate over the srting until it reaches the zero before
//the first 1 in the string
i++;
}
binary_str.erase(0, i); //this will erase all the preceeding zeroes
return binary_str;
}
Этот вышеописанный код не работает и показывает ошибку,
Но этот второй код работал:
string trimmer(string& binary_str) {
int i=0;
for (i = 0; i < 32; i++) {
if (binary_str.at(i) == '1') {
break;
}
}
binary_str.erase(0, i);
return binary_str;
}
Оба имеют функцию ie, если задан input : двоичная строка 00000000000000000000001011001011, тогда вывод должен быть 1011001011.
Прежний код, используемый при l oop, тогда как последний используется для l oop с условным условием. Бот-коды следуют тому же логу c. но первый с while l oop обнаружил ошибку, а второй нет.
Кто-нибудь может мне объяснить причину, по которой l oop выдает ошибку? это будет много значить для меня.
Полный код выглядит следующим образом:
#include<bits/stdc++.h>
using namespace std;
/*
string trimmer(string& binary_str) {
int i=0;
while (binary_str.at(i) != 1) {
i++;
}
binary_str.erase(0, i);
return binary_str;
}
*/
string trimmer(string& binary_str) {
int i=0;
for (i = 0; i < 32; i++) {
if (binary_str.at(i) == '1') {
break;
}
}
binary_str.erase(0, i);
return binary_str;
}
int main(){
string bStr="00000000001011001011";
bStr = trimmer(bStr);
cout<< bStr<<'\n';
return 0;
}