// question du visage 5: remplacer les espaces // Titre: S'il vous plaît mettre en œuvre une fonction, chacun des espaces dans la chaîne de remplacement comme « 20% ». Par exemple, entrez "Nous sommes heureux.", // sortie "We% 20are% 20happy." . #include <cstdio> #include <CString> / * la capacité totale du tableau de caractères de longueur est supérieure ou égale à la longueur réelle de str * / vide de ReplaceBlank ( omble str [], int longueur) { // Robustesse test null longueur de pointeur est inférieur à 1. 2. 0 IF (STR == nullptr une longueur || <= 0 ) retour ; // idées principales: la première fois la complexité est O (n) recherche de l' espace, puis après le début de la fin de chaîne déplacer. int Number = 0 ; // nombre de places int true_length = 0 ; // longueur réelle int I = 0 ; le tout (! STR [I] = ' \ 0 ' ) // à la fin de { IF (STR [I] == ' ' ) // trouver des espaces ++ Nombre; ++ true_length; ++ I; } // printf ( "le numéro de l' espace:% d \ n-", numéro); // test de robustesse après le remplacement de longueur dépassé comme IF (* Numéro true_length + 2 > longueur) retour ; // true_length de '\ 0' pour ( int I = true_length, I> = 0 ; Inc. (www.i-levelmedia.com)) // traversant la queue et remplacé { IF (STR [I] == ' ' ) // trouver de l' espace pour commencer à remplacer { STR [I + * Numéro 2 - 0 ] = ' 0 ' ; STR [I + Nombre * 2 - 1. ] = ' 2 ' ; STR [I + Nombre * 2 - 2 ] = ' % ' ; --number; // commencer oublié d'écrire, perplexe SI (nombre == 0 ) // efficacité PAUSE ; } else { // mouvement non vide sur STR [Number * I + 2 ] = STR [I] ; } } }
Analyse: La liste des nouvelles et établies indice des relations directes, ou un nouvel indice.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// ====================测试代码==================== vide Test ( const ombles * TESTNAME, ombles str [], int longueur, const ombles attendu []) { si (TESTNAME =! nullptr) printf ( " % s commence: " , TESTNAME); ReplaceBlank (str, longueur); si (expected == nullptr && str == nullptr) printf ( " passé \ n. " ); d' autre si (== prévu nullptr && str! = nullptr) printf ( "a échoué \ n. " ), d' autre si (strcmp (str, attendu) == 0 ) printf ( " passé \ n. " ), d' autre printf ( " échoué \ n. " ); } // 空格在句子中间 vide Test1 () { const int longueur = 100 ; ombles str [longueur] = " Bonjour tout le monde " ; test ( " Test1 " , str, longueur, " bonjour% 20World " ); } // espaces au début de la phrase vide Test2 () { const int longueur = 100 ; ombles STR [longueur] = " HelloWorld " , le test ( " Test2 " , STR, longueur, " % 20helloworld " ); } // espaces à la fin de la phrase annuler la Test3 () { const int longueur = 100 ; carbonisation STR [longueur] = " HelloWorld " , le test ( " le Test3 " , STR, la longueur," HelloWorld% 20 est " ); } // consécutifs deux espaces vides Test4 () { const int longueur = 100 ; ombles STR [longueur] = " Bonjour tout le monde " , le test ( " Test4 " , STR, longueur, " Bonjour% % 20World 20 est " ); } // nullptr entrant un vide doit être effectué Test5 () { test ( " Test5 doit être menée " , nullptr a, 0 , nullptr a); } // chaîne entrante est vide videTest6 () { const int longueur = 100 ; ombles STR [longueur] = "" ; le test ( " test6 " , STR, longueur, "" ); } // contenu entrant à une chaîne vide vide test7 () { const int longueur = 100 ; carbonisation STR [longueur] = " " ; le test ( " test7 " , STR, longueur, " % 20 est " ); } // chaîne passée sans espace vide test8 () { Const int longueur = 100 ; ombles STR [longueur] = " HelloWorld " , le test ( " test8 " , STR, longueur, " HelloWorld " ); } // chaîne passée tous les espaces vides test9 () { const int = longueur 100 ; carbonisation STR [longueur] = " " ; le test ( " test9 " , STR, longueur, " %% 20 est 20 est 20 est% " ); } intprincipal ( int argc, ombles * argv []) { Test1 (); Test2 (); Test3 (); Test4 (); Test5 (); Test6 (); Test7 (); Test8 (); Test9 (); retourner 0 ; }