web-dev-qa-db-fra.com

Sélection uniquement des premiers caractères d'une chaîne C++

Je veux sélectionner les 8 premiers caractères d'une chaîne en C++. À l'heure actuelle, je crée une chaîne temporaire de 8 caractères et la remplis des 8 premiers caractères d'une autre chaîne.

Cependant, si l'autre chaîne ne comporte pas 8 caractères, il me reste des espaces non désirés.

string message = "        ";

const char * Word = holder.c_str();

for(int i = 0; i<message.length(); i++)
    message[i] = Word[i];

Si Word est "123456789abc", ce code fonctionne correctement et message contient "12345678".

Cependant, si Word est plus court, quelque chose comme "1234", le message finit par être "1234 "

Comment puis-je sélectionner les huit premiers caractères d'une chaîne ou la chaîne entière si elle est inférieure à 8 caractères?

7
user3483203

Il suffit d'utiliser std::string::substr:

std::string str = "123456789abc";
std::string first_eight = str.substr(0, 8);
10
cadaniluk

Il suffit d'appeler resize sur la chaîne.

6
David Schwartz

Si j'ai bien compris vous écrivez

std::string message = holder.substr( 0, 8 );

Si vous devez récupérer des caractères dans un tableau de caractères, vous pouvez écrire par exemple

const char *s = "Some string";

std::string message( s, std::min<size_t>( 8, std::strlen( s ) );
3
Vlad from Moscow

Ou vous pouvez utiliser ceci:

#include <climits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');

Si le max est de 8, ça s'arrête là. Mais vous devez définir 

const char * Word = holder.c_str();

à 8. Je crois que vous pourriez le faire en écrivant 

 const int SIZE = 9;
 char * Word = holder.c_str();

Laissez-moi savoir si cela fonctionne.

S'ils touchent un espace à un moment donné, cela ne ferait que lire dans l'espace.

0
Katie Stevers