J'essayais de couper tous les zéros leaders / précédents dans un nombre binaire 32 bits et imprimer la sortie par ces 2 codes suivants, dont la première a montré une erreur pendant que l'autre code a été réussi:
Ce code écrit ci-dessus n'a pas fonctionné et a montré une erreur, P> mais ce deuxième code a fonctionné : P> #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;
}
3 Réponses :
Essayez d'utiliser des fonctionnalités C ++ modernes:
#include <iostream> #include <algorithm> #include <string> void ltrim_zero(std::string& str) { str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](int character) { return '0' != character; })); } int main(){ std::string bStr = "00000000001011001011"; ltrim_zero(bStr); std::cout << bStr << std::endl; return 0; }
Vous pouvez utiliser Find_First_not_of code>
Pour trouver le premier caractère de cela n'est pas un 0 code>. Ensuite, vous pouvez
Effacer code>
Tous les caractères à ce point. Si une chaîne est tout zéros, elle sera complètement effacée. void trim_leading_zeros(std::string &str) {
str.erase(0, str.find_first_not_of('0'));
}
Recherchez la première occurrence de '1' et utilisez cette variante du constructeur de chaînes str = string à copier de p> pos = position de départ à copier de p> npos = Nombre de caractère à copier à partir de la chaîne source (STR). p> p>
Pourquoi pensez-vous
pendant (binary_str.at (i)! = 1) code> et
si (binaire_str.at (i) == '1') { code> sont les mêmes?
Vous avez utilisé le caractère
'1' code> dans une comparaison (qui se trouve dans ASCII 49) et décimal 1 de l'autre (qui serait le "début de la rubrique" rarement utilisé).
Après la méthode "moderne C ++" de le faire serait d'utiliser
std :: Trouver code>