Impossible de remplacer un caractère dans une chaîne par une autre chaîne

akash11

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?

J... S

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    obtenir le nombre de marqueur affiché sur la carte

  3. 3

    comment obtenir un objet de requête dans les tests unitaires de django?

  4. 4

    Microsoft.WebApplication.targets

  5. 5

    Comment ajouter un texte dans un texte Python/Tkinter

  6. 6

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  7. 7

    mongo kafka connect source

  8. 8

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  9. 9

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  10. 10

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  11. 11

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  12. 12

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  13. 13

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  14. 14

    Laravel 8: Attempt to read property "id" on null

  15. 15

    définir une propriété pour chaque nœud dans neo4j

  16. 16

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  17. 17

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  18. 18

    Aide de variable de débogage pprint jinja2

  19. 19

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  20. 20

    Impression de la longueur du chemin le plus court dans le labyrinthe

  21. 21

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

chaudétiquette

Archive