comme une affectation, je dois écrire une fonction en C ++ qui supprime un mot dans une phrase. On nous donne la phrase elle-même comme une chaîne Il peut y avoir plusieurs espaces entre les mots et la phrase peut se terminer et commencer par des espaces. p> par exemple: Le problème est que je ne peux utiliser que STD :: Taille de la chaîne () et redimensionner (). P> Je ne devrais aussi supprimer que le mot, pas les espaces autour de lui. p> J'ai écrit du code, mais la sortie n'est pas correcte: je mets tous les mots dans un tableau, puis en supprimant celui d'un argument, mais les espaces blouses sont un gros problème Comme ils sont mis dans la matrice également, je ne suis donc pas capable de les supprimer et d'imprimer correctement. P> Avez-vous des idées comment résoudre ce problème? Merci! P> Mon code jusqu'à présent: P> std :: string phrase code> et le numéro d'un mot à supprimer int place code>. DELETEWORD ("renard a sauté sur le chien paresseux", 2) code> devrait revenir: "renard chien paresseux " code>. p> std::string DeleteWord(std::string sentence, int place){
std::string retvalue;
long long wordcounter = 0;
long long spacecounter = 0;
long long spacescounter = 0;
int i = 0;
int index = 0;
for(int i=0; i<sentence.size(); i++){
if((sentence[i]==' ') && (sentence[i+1]!=' ')) spacecounter++;
}
for(int i=0; i<sentence.size(); i++){
if(sentence[i]==' ') spacescounter++;
}
std::string words[spacescounter+1];
while(i<sentence.size()){
if(sentence[i]!=' '){
words[index] += sentence[i];
i++;
}
else{
index++;
i++;
}
}
sentence[place-1] = ' ';
for(int i=0; i<=index; i++){
retvalue+=words[i] + ' ';
}
return retvalue;
}
3 Réponses :
Rechercher l'index de démarrage et l'index de fin du mot doivent être supprimés, je l'appelle s code> et E code> respectivement, le résultat sera: phrase [0 : S-1] + phrase [E + 1-> phrase.Size () - 1] code>. Je suppose que la valeur d'entrée du lieu sera valide (supérieure à zéro et égale à ou moins de nombre de mots dans la phrase). Vous pouvez essayer avec mon code:
Bonjour, Merci pour votre réponse. Je ne peux pas utiliser aucun autre fichier d'en-tête que
J'ai vérifié les mots dans le tableau de caractères en cochant les espaces et je supprime les mots en modifiant la position "\ 0 '(chaîne d'extrémité) o en déplaçant le tableau
#include <string>
#include <iostream>
#include <string.h>
//#include <stdio.h>
using namespace std;
string DeleteWord(string a,int index)
{
int length=a.size();
int pos;
int word=1;
char* s;
s=new char[length];
strcpy(s,a.c_str());
for(int i=0; i<length; i++)
{
if(s[i]==' ' and i!=0 and s[i-1]!=' ')
word++;
}
if(index>word)
{
delete [] s;
return "error";
}
else
{
if(index==word)
{
pos=0;
for(int i=length-1; i>=0; i--)
{
if(s[i]==' ')
{
pos=i+1;
break;
}
}
s[pos]='\0';
}
else
{
int wl=0;
char pre=' ';
word=0;
pos=-1;
bool found=false;
for(int i=0; i<length; i++)
{
if(pre==' ' and s[i]!=' ')
{
word++;
if(word==index){
found=true;
pos=i;
}
}
if(found==true)
{
if(s[i]==' '){
break;
}
else
wl++;
}
pre=s[i];
}
for(int i=pos; i<length; i++)
s[i]=s[i+wl];
}
string f=string (s);
delete[] s;
return string(f);
}
}
int main()
{
string str="Fox jumped over lazy dog";
cout<<DeleteWord(str,4)<<endl;
return 0;
}
Merci pour votre réponse. La fonction doit renvoyer une chaîne, il doit donc être STD :: Type de chaîne. En outre, le premier argument doit être STD :: String aussi, pas un char. Ce sont les règles de la tâche.
J'ai changé le code. Cela devrait respecter vos contraintes.
J'ai édité le code pour supprimer le tableau de longueur variable
@Thomassablik maintenant le code devrait fonctionner pour chaque entrée.
Mais lorsque la fonction met fin à la variables devrait détruire.
@Thomassablik btw maintenant le code devrait éviter les fuites de mémoire
Vous n'avez pas à compter les espaces ou les mots. Vous n'avez pas à stocker les mots dans un tableau.
Itérate sur la phrase et décrémenter une solution C ++ 98 sans place code> si l'élément précédent est un espace et que le courant est un espace non-espace. Si place code> est 0 Vous devez ignorer le mot. Sinon, copiez la chaîne en chaîne retournée. Comme je l'ai dit dans les commentaires, c'est aussi simple qu'une boucle, une variable, 3 si des conditions: p> std :: Isspace < / code> et sans l'argument de const refer: p>
Bonjour, Merci pour votre réponse. Y a-t-il quelque chose que je puisse échanger "auto" et "const auto & c: phrase"? Je suis codé dans C ++ 98 et souhaiterais avoir une solution plus simple que cela, comme je ne le comprends pas et que cela ne compile pas du tout.
J'ai ajouté une solution C ++ 98 sans std :: Isspace code>
Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été déplacé pour discuter .