2017-04-10 2 views
-1

EDIT: Le code ne devrait pas poser de problème ... Est le problème de code en amont.C++ remplacer wstring par un autre wstring (plus de 80 caractères)

Merci pour tout de vous!

La question originale:

Je trouve un exemple de code de

Replace part of a string with another string

Et je l'ai fait un changement (modifié):

bool replace(std::wstring& str, const std::wstring& from, const std::wstring& to) { 
size_t start_pos = str.find(from); 
if (start_pos == std::wstring::npos) 
    return false; 
str.replace(start_pos, from.length(), to); 
return true; 
} 

// Source wstring 
// (This is an example, actual wstring is return by a code library) 
wstring inputString = L"The apple is a deciduous tree, \\ngenerally standing 1.8 to 4.6 m (6 to 15 ft) tall in cultivation \\nand up to 12 m (39 ft) in the wild." 
// Place some conditions 
wstring textToReplace = L"\\n"; 
wstring newWstring = L"\n"; 

replace(inputString, textToReplace, newWstring); 

Et son travail correctement au début . Mais quand je génère une chaîne contient 135 caractères, le résultat n'a renvoyé que les 79 premiers caractères.

Par exemple, voici mon wstring:

The apple is a deciduous tree, \\ngenerally standing 1.8 to 4.6 m (6 to 15 ft) tall in cultivation \\nand up to 12 m (39 ft) in the wild. 

Je veux remplacer le "\\ n" par "\ n" dans le code source. Je peux donc les imprimer (wcout) pour une seule ligne.

Et voici ce que je suis:

The apple is a deciduous tree, \ngenerally standing 1.8 to 4.6 m (6 to 15 ft) 

Ce que je veux:

The apple is a deciduous tree, \ngenerally standing 1.8 to 4.6 m (6 to 15 ft) tall in cultivation \nand up to 12 m (39 ft) in the wild. 

Edit: Je sais que je devrais mettre une boucle while et je faisais avant, mais pas sauver.

Il fonctionne complètement si le wstring est inférieur à 80 longueur. Le "\\ n" est en fait remplacé par "\ n", et aucun problème avec cout < <

Mais je ne comprends pas ce qui se passe avec les 57 derniers caractères.

Ils sont partis ... Comment puis-je remplacer une partie d'un wstring avec un autre wstring,

mais la wstring source est « plus » que 80 caractères?

+4

Veuillez fournir un [mcve]. Comment vérifiez-vous le résultat? Et pourquoi le titre mentionne wstring, quand il y a des 'string's dans le code? – Angew

+0

Notez que votre solution ne boucle pas. Seule la première instance d'une balise 'from' sera remplacée. –

+0

Merci, les gars, j'ai mis à jour la question ... La partie clé de la question devrait être, pourquoi les personnages avaient disparu après le 79e. Avant je faisais une boucle en boucle mais elle est perdue 80 après, aussi. @Angew –

Répondre

0

En vérifier la valeur de inputString.size(),

le wstring retourné par la bibliothèque de code est toujours 79 longueur.

Ceci est un problème de code de code en amont ... Merci pour tout de vous!