Bonjour à tous, je viens vous consulter après mainte recherche car j'ai un problème dans mon code, en faite je demande a l'utilisateur un mot à rechercher dans une phrase et par quel mot il veut le remplacer. Le problème est que dans l'exemple si je marque "long de" et je remplace par longue ça marche très bien!! (plutôt cool :p)

Mais si je cherche un mot unique exemple "long" ou de plusieurs mots (supérieur à 3) "long de simple" ça plante.

Bon je vous explique en quelques phrase ce que j'ai voulu faire:

En clair on suppose que l'utilisateur recherche tjs un mot qui existe puis on recherche où est ce mot grâce a strstr. Ensuite on remet le début de la phrase dans une autre phrase puis on rajoute le mot à la place de l'autre puis on met la fin de la phrase dans la phrase final.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
 
 
 
#include <math.h>
#include <string.h>
#include <stdio.h>
 
int main(int argc, char ** argv)
 
{
 
    char str[100]="texte long de relativement simple long de simple long de plusieurs mots";
    char final[100],test[100];
    char cible[20],remplace[20];
    char bidule[20];
    char bidule2[20];
    char longue;
    int finish=0,premier=0;
    char * pch, * pch1;
    char bidule3[100];
    char * place;
    int i,nbr=0,t=0,nbr2=0,diff,nbr3=0,nbr4=0;
    while (1)
 
    {
 
        //  pch1=nbr;
 
        if (premier==0)
        {
 
            printf ("entrer votre mot rechercher: ");
            fgets(cible,20,stdin);
            printf ("entrer votre mot pour le remplacer: ");
            fgets(remplace,20,stdin);
            printf("remplace :%s",remplace);
 
            for (t=0; t<20; t++)
            {
                if(cible[t]=='\n' || cible[t]=='\0')
                    t=21;
                else
                    nbr++;   // permet de compter le nombre de lettre
 
            }
            for (t=0; t<20; t++)
            {
                if(remplace[t]=='\n'||remplace[t]=='\0')
                    t=21;
                else
                    nbr2++;  // permet de compter le nombre de lettre
 
            }
 
            diff=nbr-nbr2; // permet de savoir le nombre de lettre qui diffère
            for (i=0; i<nbr; i++)
            {
                bidule[i]=cible[i];
            }
            for (i=0; i<nbr2; i++)
            {
                bidule2[i]=remplace[i];
            }
            // pour moi le bug ce trouve principalement ici car dans mes tests
            //mon programme plante là mais je ne comprend vraiment pas
            // pourquoi ça fait cela
 
            for (i=0; i<diff; i++)
            {
                bidule3[i]=' ';
            }
 
 
            pch = strstr (str,bidule);
            nbr3=pch-str;
 
          //remplacement dans la phrase final
            for (i=0; i<nbr3; i++)
            {
                final[i]=str[i];
            }
            for (i=0; i<nbr2; i++)
            {
                final [nbr3+i]=bidule2[i];
            }
 
            for (i=0; str[nbr3+nbr+i]!='\0'; i++)
            {
                final[nbr3+nbr2+i]=str[nbr3+nbr+i];
            }
            //on met \0 pour etre sur de la fin
            final[nbr3+nbr2+i]='\0';
            longue=nbr3+nbr2+i;
            pch1=0;
            pch1 = strstr (final,bidule);
            nbr4=pch1;
            if (nbr4==0)
                finish=1;
 
            premier=1;
        }
 
// si il y plusieurs foi le mot dans la phrase on recommence
        else
        {
 
 
            for (i=0;i<longue;i++)
            {
                test[i]=final[i];
            }
 
            diff=nbr-nbr2;
            for (i=0; i<nbr; i++)
            {
                bidule[i]=cible[i];
            }
            for (i=0; i<nbr2; i++)
            {
                bidule2[i]=remplace[i];
            }
 
            char bidule3[diff];
 
            for (i=0; i<diff; i++)
            {
                bidule3[i]=' ';
            }
 
 
            pch = strstr (test,bidule);
            nbr3=pch-test;
            for (i=0; i<nbr3; i++)
            {
                final[i]=test[i];
            }
            for (i=0; i<nbr2; i++)
            {
                final [nbr3+i]=bidule2[i];
            }
 
            for (i=0; test[nbr3+nbr+i]!='\0'; i++)
            {
                final[nbr3+nbr2+i]=test[nbr3+nbr+i];
            }
 
            final[nbr3+nbr2+i]='\0';
            pch1=0;
            pch1 = strstr (final,bidule);
            nbr4=pch1;
            if (nbr4==0)
                finish=1;
 
 
        }
 
        if (finish ==1)
        {
 
 
            printf ("phrase de base: %s\n",str);
            printf ("phrase de final: %s\n",final);
            return 0;
 
        }
    }
 
}

Si vous trouvez mon erreur ou vous avez une idée de où ça pourrait venir et me mettre sur la voix je vous en remercierais.

Cordialement
Un noob :p