Voici une question où nous devons remplacer toutes les occurrences d'un caractère dans une chaîne par une autre nouvelle chaîne. Ci-dessous est la question:
Ecrivez un programme qui remplace l'occurrence d'un caractère donné (disons c) dans une chaîne primaire (disons PS) par une autre chaîne (disons s).
Entrée : La première ligne contient la chaîne principale (PS) La ligne suivante contient un caractère (c) La ligne suivante contient une ou plusieurs chaînes
Sortie : Affiche la chaîne PS avec chaque occurrence de c remplacée par s.
REMARQUE : - Il n'y a pas d'espaces dans PS ou s. - La longueur maximale de PS est de 100. - La longueur maximale de s est de 10.
Ci-dessous mon code :
#include<stdio.h>
int main()
{
char ps[100],*ptr,c,s[10];
printf("Enter any string:");
gets(ps);
printf("Enter the character you want to replace:");
scanf("%c",&c);
printf("Enter the new string:");
fflush(stdin);
scanf("%s",&s);
ptr=ps;
while(*ptr!='\0')
{
if(*ptr==c)
*ptr=s;
ptr++;
}
printf("Final string is:");
puts(ps);
return 0;
}
Je n'arrive pas à remplacer un caractère par une chaîne. Cela me donne juste une sortie poubelle à la place du personnage que je veux remplacer.
Mais, lorsque je le déclare en tant que caractère, la sortie est comme prévu. Il remplace le caractère par un autre caractère.
Pourriez-vous s'il vous plaît m'aider avec cela?
Le *ptr=s;
dans
if(*ptr==c)
*ptr=s;
affecte vraiment l'adresse de base du tableau de caractères s
à l'emplacement mémoire pointé par ptr
. Cela ne remplace pas le caractère par une chaîne mais conduira à une erreur.
Je suis d'accord avec Yano . Il serait préférable de créer un nouveau tableau de caractères pour stocker la chaîne résultante car le tableau d'origine peut ne pas avoir assez d'espace pour contenir le nouveau.
Si la nouvelle chaîne est result
, vous pouvez faire quelque chose comme
for(i=j=0; ps[i]!='\0'; ++i)
{
result[j++]=ps[i];
if(ps[i]==c)
{
for(--j, k=0; s[k]!='\0'; ++k)
{
result[j++]=s[k];
}
}
}
result[j]=0;
Le scanf("%s",&s);
doit être fait scanf("%s", s);
car le nom d'un tableau se décompose en un pointeur vers son premier élément.
Il vaut mieux éviter gets()
et fflush(stdin)
comme l'a mentionné Sourav Ghosh .
fgets()
est plus sûr que gets()
parce que vous pouvez garantir que vous ne déborderez jamais le tampon de la chaîne d'entrée .
Quant à vous fflush(stdin)
tromper, regardez ici .
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots