Voici mon code, il inverse simplement la phrase:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string sentence;
string reversedSentence;
int i2 = 0;
cout << "Type in a sentence..." << endl;
getline(cin, sentence);
for (int i = sentence.length() - 1; i < sentence.length(); i--)
{
reversedSentence[i2] = sentence[i];
i2++;
}
cout << reversedSentence << endl;
}
La compilation fonctionne bien, mais lorsque j'essaie d'exécuter le programme, cela se produit:
Type in a sentence...
[input]
/home/keith/builds/mingw/gcc-9.2.0-mingw32-cross-native/mingw32/libstdc++-v3/include/bits/basic_string.h:1067: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int]: Assertion '__pos <= size()' failed.
Votre reversedSentence
chaîne est vide, donc son indexation appelle un comportement indéfini. Au lieu de cela, vous pouvez utiliser push_back
comme ceci:
for (int i = sentence.length() - 1; i >= 0; i--)
{
reversedSentence.push_back(sentence[i]);
}
Notez également que votre condition de boucle doit être modifiée. sentence
Si static_cast
le cas est vide, vous devez le .length()
faire int
avant de soustraire de 1, comme ceci:
for (int i = static_cast<int>(sentence.length()) - 1; i >= 0; i--)
{
reversedSentence.push_back(sentence[i]);
}
Vous pouvez également simplement utiliser un algorithme pour cela:
reversedSentence = sentence;
std::reverse(reversedSentence.begin(), reversedSentence.end());
Cela évite les complications lorsque la sentence
chaîne est vide.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots