[C] Supprimer 1ère occurence selon motif

Résolu
houda -  
 houda -
Bonjour
je cherche la correction de cet exercice
s'il vous plait aidez moi
l'exercice:
ecrire un programme qui suprime la premiere occurence d'une chaine de caracteres OBJ dans une autre
chaine de caracteres SUJ
EXEMLES:
PHON ALPHONSE ALSE
T TOTALEMENT OTALEMENT
HELLO HELLO

et merci en tout cas
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Puisque tu as le droit d'utiliser les fonctions de string.h, tu peux faire :
    #include <stdio.h>
    #include <string.h>
    
    int main(void){
        char suj[50];
        char obj[10];
        char *p=NULL;
    
        printf("Entrez une chaine : ");
        fgets(suj,sizeof suj,stdin);
        printf("Mot à supprimer : ");
        scanf("%9s",obj);
    
        p=strstr(suj,obj);
        if(p)
            memmove(p,p+strlen(obj),sizeof obj);
    
        puts(suj);
        
        return 0;
    }
    

    Cdlt
    1
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      Je préfère ta version ;-)
      Toutefois avec for il peut voir un peu le mécanisme ;-))
      0
  2. kill4m Messages postés 260 Statut Membre 26
     
    En quelle langage ?? (C je suppose)

    Et je suppose aussi que c'est un exercice que tu as à faire, donc tu commences (tu mets ce que tu as déjà fait) et nous on te dit si c'est juste ou pas ....

    bye
    0
    1. houda
       
      merci pour la reponsle language de traduction est c
      et on utilise la bibliotheque <string.h>
      0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Pour avoir la correction il nous faut voir ce que tu as fait. L'ennoncé ne suffit pas.
    0
  4. houda
     
    merci pour la reponse
    c tres gentil
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. houda
     
    mon travail c'est
    #include<stdio.h>
    #include<
    void main()
    {
    char obj[20],suj[20];
    int i,j;
    j=0;
    for(i=0;obj!='/0';i++)
    if(obj[i]!=obj[i+1])
    suj[j]=obj[i];
    j++;

    }
    c'est ça mon tarvail, je ne sais pas comment je continue le programme
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,
    lami20j@debian:~/trash/ccm_c$ cat ccm53_premieroccurence.c
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
            char obj[10];
            char suj[50];
            int i,j,k,t;
    
            printf("Entrez un la chaine : ");
            fgets(suj,50,stdin);
            printf("Mot à supprimer : ");
            scanf("%s",obj);
    
            for(i=0;suj[i]!='\0';i++){
                    for(j=i,k=0;obj[k]!='\0' && suj[j]==obj[k];++j,++k)
                            ;
                    if (k>0 && obj[k]=='\0')
                            break;
            }
    
            for(t=i;t<strlen(suj);++t)
                    suj[t]=suj[t+k];
            suj[t]='\0';
            printf("%s\n",suj);
            return 0;
    }
    Résultat
    lami20j@debian:~/trash/ccm_c$ gcc ccm53_premieroccurence.c
    lami20j@debian:~/trash/ccm_c$ ./a.out
    Entrez un la chaine : ALPHONSE
    Mot à supprimer : PHON
    ALSE
    
    lami20j@debian:~/trash/ccm_c$ ./a.out
    Entrez un la chaine : TOTALEMENT
    Mot à supprimer : T
    OTALEMENT
    
    lami20j@debian:~/trash/ccm_c$ ./a.out
    Entrez un la chaine : HELLO
    Mot à supprimer : HELLO
    
    
    lami20j@debian:~/trash/ccm_c$ ./a.out
    Entrez un la chaine : A LA FIN
    Mot à supprimer : FIN
    A LA
    
    --
    106485010510997108
    0
  8. houda
     
    merci pour le resulat
    on a fait la correction en classe et c'est presque le meme resultat
    merci encore
    0