Getline à la Chaîne des Copies de saut de ligne ainsi
Je suis à la lecture d'un fichier ligne par ligne et l'ajout de chaque ligne dans une chaîne de caractères. Cependant la longueur de la corde augmente de 1 à chaque ligne, je crois que c'est dû à caractère de saut de ligne. Comment puis-je le supprimer d'être copiés.
Voici mon code de tenter de faire de même.
if (inputFile.is_open())
{
{
string currentLine;
while (!inputFile.eof())
while( getline( inputFile, currentLine ) )
{
string s1=currentLine;
cout<<s1.length();
}
[Mis à jour la Description] j'ai utilisé notepad++ pour déterminer la longueur de ce que je suis en sélection ligne par ligne. Ils sont donc à montrer certaines 123, 450, 500, 120 pour que mon programme affiche 124,451,501,120. Sauf la dernière ligne, tous ligne.longueur() montre une augmentation en valeur de 1.
- Bienvenue sur StackOverflow. J'ai formaté votre code pour vous. Le premier est gratuit. Après que vous avez à m'acheter une pinte de bière 😉
std::getline()
rejette le caractère de saut de ligne. Comment faites-vous connaître la longueur de la ligne?- À l'aide de cout<<s1.length();
- C'est la longueur de la ligne lue par
std::getline()
, qui semble être différent de ce que vous attendez, - C'est peut-être un problème de saut de ligne sur les différents plattforms? D'où vient le fichier à partir de, sur la plate-forme que vous avez écrit votre programme?
Vous devez vous connecter pour publier un commentaire.
Il ressemble
inputFile
a des Fenêtres de style des sauts de lignes (CRLF), mais votre programme est le fractionnement de l'entrée sur Unix-comme des sauts de lignes (LF), parce questd::getline()
, les pauses sur\n
par défaut, laissant le CR (\r
) à la fin de votre chaîne.Vous aurez besoin de couper le superflu
\r
s. Voici une façon de le faire, avec un petit test:De sortie:
Choses à noter:
std::getline()
sera de retour le ruisseau, qui sera jeté àfalse
quand il peut lire n'est plusinputFile
.C'est parce que vous êtes sous MS-Windows et d'ajouter un "\r" avant le "\n" et "\r" n'est pas supprimé.
\r
est également supprimé (stackoverflow.com/a/6089413/237483), mais c'est une question, si le fichier est stocké sous Windows et de lire sous Linux.\n
qui est dépouillé mais ce gentil personnage invisible à la fin de chaque ligne facilement mess le lit. Il est simple à vérifier si c'est le cas:if (!s.empty() && s.back() == '\r') { std::cout << "gotcha!\n"; }