2017-08-24 2 views
0

J'ai du mal à transmettre la valeur de retour chariot à une fonction std :: string.Comment comparer une chaîne à un retour chariot 0x0D?

std::string parsedWord; 
size_t found = str.find_first_not_of(' '); 
if (found == std::string::npos) std::cout << "No non-whitespace characters found\n"; 
    else 
     { 
      while (str.compare(found, 1, " ") || str.compare(found, 1, 0x0D) 
    // The last argument should be a const char*. 
      { 
        parsedWord += str[found]; found++; 
      } 
     } 

Je veux spécifiquement comparer à la valeur 0x0D, parce que sur les systèmes Windows nouvelle ligne est CR LF et d'autres systèmes utilisent différents types, je veux juste vérifier contre 0x0D

+0

Que diriez-vous de l'analyser en char, comme 'char (0x0D)'? – Sma

+2

vous avez des caractères '\ r' et '\ n' pour les caractères de retour chariot de fin de ligne ... Mais pourquoi ne pas simplement utiliser la fonction isspace qui gèrera tous les espaces –

+0

Quel est le but de la boucle que vous avez? Pour supprimer des espaces? Ensuite, je vous suggère de vérifier ce que la fonction 'compare' [* renvoie *] (http://en.cppreference.com/w/cpp/string/basic_string/compare#Return_value). –

Répondre

3

Essayez cette

while (str.compare(found, 1, " ") || str.compare(found, 1, "\r") 
+0

Mais comment savoir ce que "\ r" est? entre les systèmes c'est CR LF, LF CR, juste CR, c'est vraiment déroutant. J'ai essayé quelque chose comme const char * = & ((const char) 0x0D) mais pas de chance – Zebrafish

+0

Peut-être donner une explication de comment cela fonctionne? C'est à dire. qu'est-ce que '\ r'? – tambre

+0

@Zebrafish '\ r' est le caractère de retour chariot. C'est toujours la meme chose. '\ n' est le nouveau caractère de ligne. Certains systèmes utilisent les deux en combinaison (Windows), d'autres n'utilisent que le nouveau caractère de ligne (Linux). – tambre