La recherche pour le saut de ligne '\n' personnage dans un objet de type string
J'ai un objet chaîne de caractères de la forme générale string line = "yadayada\nyadaya"
. Je boucle sur la chaîne comme ci-dessous d'essayer de "rattraper" le caractère de saut de ligne.
for (int i = 1; i < line.length(); i++)
{
if ( ( line[i]== ' \ ') && ( line[i+1] == 'n' ) )
{
buffer.insertChar('\n');
i = i+2;
}
else
{
buffer.insertChar(line[i]);
}
}
Comme vous pouvez le voir, je boucle à travers la chaîne de caractères et je suis d'insérer les caractères un par un dans un autre objet appelée mémoire tampon (pas à la question).
Dans le premier cas if ( ( line[i]== ' \ ') && ( line[i+1] == 'n' ) )
je suis en train d'essayer de "rattraper" le caractère de saut de ligne et à l'intérieur que si la carrosserie je suis l'incrémentation de l'indice i par deux, de sorte qu'il va sauter les caractères '\' et 'n' dans la boucle suivante. Le problème est que cette boucle attrape jamais un caractère de saut de ligne, mais toujours insère dans la mémoire tampon les deux caractères '\' et 'n' .
Note importante: je commence la boucle avec l'indice i = 1, car le premier personnage agit comme une commande et est traité spécialement.
Mise à jour: j'ai modifié le code ci-dessus, mais toujours pas de chance avec ce que je suis en train d'accomplir
for (int i = 1; i < line.length(); i++)
{
if ( (line[i]== '\n') )
{
buffer.insertChar('\n');
i = i+1;
}
else
{
buffer.insertChar(line[i]);
}
}
Mise à jour # 2 : Si ça peut aider la chaîne est originaire de l'entrée de l'utilisateur comme ci-dessous:
string line;
getline(cin,line);
OriginalL'auteur Vaios Argiropoulos | 2011-12-26
Vous devez vous connecter pour publier un commentaire.
"\n" est pas une chaîne de caractères contenant un
\
suivie par unn
. La séquence d'échappement\n
dénote un caractère unique, que vous pouvez rechercher avecou avec un bon vieux
std::string::find
.OriginalL'auteur Fred Foo
Au lieu de
( line[i]== ' \ ') && ( line[i+1] == 'n' )
, essayezif ( line[i]== '\n')
et
i = i+1;
OriginalL'auteur c0da
'\n' est un char, pas deux.
essayer:
OriginalL'auteur zgnilec
Je ne suis pas sûr si vous êtes à la recherche de la séquence de caractère " \ "plus" n " ou le retour à la ligne (dont la représentation au sein d'un fichier source C est, en effet, \n, mais qui correspond à un octet unique!), mais dans les deux cas, cela devrait être ok:
Cet exemple imprime
yadayadayayda\nyadayada
, ce qui est probablement ce que vous voulez.string foo("string literal");
etstring foo="string literal";
lors de la création defoo
faire pratiquement la même chose (en fait je n'ai même pas remarqué que j'ai utilisé la première forme pour le motif et lasecond
pourinput
). S'il vous plaît être cohérent, il est assez difficile de comprendre ce que vous essayez de faire: dans votre question, vous parlez \n ou '\' plus 'n', dans le commentaire que vous parlez à la place de"/": ce dernier n'a pas de signification particulière, c'est un caractère comme un autre, '\' est un caractère d'échappement, de sorte qu'il a une signification spéciale: lien.OriginalL'auteur Lorenzo Pistone
Dans
string line = "yadayada\nyadaya"
, il y en a un caractère entre"yadayada"
et"yadaya"
. Vouliez-vous dire"yadayada\\nyadaya"
, que vous voulez convertir à"yadayada\nyadaya"
?' \ '
devrait être'\\'
. Je devine que vous avez essayé'\'
, eu une erreur de compilation, et pensé que vous seriez essayez d'ajouter des caractères jusqu'à ce qu'il compilé? C'est une mauvaise idée.' \ '
, si elle est acceptée par le compilateur à tous, n'égaleront jamais.Il y a aussi un problème de plus:
i = i+2;
augmente je par 2, mais vous devez aller à lai++
, si vous augmentez i par un total de 3.OriginalL'auteur
Il ya un couple de problèmes avec le code:
si vous supposez que '\' et 'n' sont deux personnages différents, si le '\' est à la fin du code, vous exécutez hors de la matrice! vous avez besoin de mettre à la condition if si l'
i<n-1
'\' et 'n' sont généralement d'un caractère, de sorte que vous ne test
line[i] == '\n'
.Votre i=i+2 est faux comme vous l'avez toujours incrémenté de 1 par la boucle de lui-même, il suffit donc de i++ dans la condition est très bien
Plus fondamentalement, ce que vous êtes en train d'essayer de réaliser? Êtes-vous juste essayer de supprimer \n à partir de la chaîne? Pourquoi ne pas utiliser la norme de chaîne de remplacer!!!!
OriginalL'auteur Alpha01