OVH Cloud OVH Cloud

Copie de chaine de caracteres sans succes

33 réponses
Avatar
bpascal123
Bonjour,
Ce code ne fonctionne pas et il me semble pas il y a avoir de
difficult=E9s. Je pense avoir fait une erreur quelque part.
Voici:

#include <stdio.h>

int main(void)
{
char Ch1[40] ;
char Suj[80] ;
char FinSuj[60] ;

int i, j, k ;
int OK ;

printf("\n\nEntrez la chaine Ch1 : ") ;
fgets(Ch1, 40, stdin) ;
printf("\nEntrez la chaine Suj. : ") ;
fgets(Suj, 80, stdin) ;

OK =3D 1 ;

for ( i =3D 0 ; OK && Suj[i] ; i++ )
if ( Suj[i] =3D=3D Ch1[0] )
{
for ( j =3D 1 ; Ch1[j] && (Ch1[j] =3D=3D Suj[i+j] ) ; j++ )
;
if ( Ch1[j] =3D=3D '\0' )
OK =3D 0 ;
}

if (!OK)
{
/* copie de la fin de Suj dans FinSuj */
i-- ;
for ( k =3D 0 ; Suj[i+j+k] ; k++ )
FinSuj[k] =3D Suj[i+j+k] ;
FinSuj[k] =3D '\0' ;
}

printf("\n%s", FinSuj) ;

printf("\n\n");

return 0 ;
}

3 réponses

1 2 3 4
Avatar
Senhon
"Samuel Devulder" a écrit dans le message
de groupe de discussion : 4b28e9ba$0$30517$
a écrit :


Note: J'aime pas Suj[i] on dirait du pascal.. beurk. Si on veut faire du C
sans pointeur autant franchement apprendre un autre langage. Le gars qui
se présente à moi en prétendant faire du C sans savoir manipuler et
utiliser les pointeurs il ne va pas faire illusion longtemps.



Je suis à 110% d'accord avec toi, le C sans les pointeurs ce se serait
tristouille.


Bon j'espère que ces quelques conseils te seront utile.



Oui, a n'en pas douter, aujourd'hui il a appris un puissant outil.
Bon ... Il a un peu tendance à tout mélanger, le langage, le système,
google, l'assembleur, l'algorithme,... mais là avec les pointeurs, il va
nous faire un feu d'artifice en 4D.
Avatar
Samuel Devulder
Marc Boyer a écrit :
Le 16-12-2009, Samuel Devulder a écrit :
Note: J'aime pas Suj[i] on dirait du pascal.. beurk. Si on veut faire du
C sans pointeur autant franchement apprendre un autre langage. Le gars
qui se présente à moi en prétendant faire du C sans savoir manipuler et
utiliser les pointeurs il ne va pas faire illusion longtemps.



On peut connaitre les pointeurs et vouloir que la syntaxe corresponde
à la sémantique et pas à la tambouille.
T'ecris *(i+Suj) ?



Perso les pointeurs c'est *s.. si on doit jouer avec *(s+machin) autant
écrire s[machin]. Mais bon ya pas de règle, il faut que ce soit simple.
Pas la peine de jouer des pointeurs (lire rouler des mécaniques) pour
montrer qu'on s'y connait. Idéalement j'utilise s[machin] quand s ne
bouge pas et *s quand on a du s++ ou du s += machin autour. En gros les
pointeurs quand on utilise le tableau (ou zone mémoire) localement et
tableau[machin] quand le tableau est vu comme une entité globale.

Mais bon pas de regles strictes en la matière, c'est une affaire de gout
tout ca.

Personnellement, j'écris toujours
f(int[])
quand la sémantique est celle d'un tableau et
f(int*)
quand c'est un pointeur sur un int isolé.



Ca dépends.. Moi je passe "une adresse" de début de tableau (je suis
proche de l'ASM il est vrai). Je préfère volontiers le int *, mais tu as
raison que le int[] peut être utilisé. Les gouts et les couleurs...

sam.
Avatar
-ed-
On 16 déc, 16:17, Samuel Devulder
wrote:
Moi je passe "une adresse" de début de tableau (je suis
proche de l'ASM il est vrai). Je préfère volontiers le int *, mais tu as
raison que le int[] peut être utilisé. Les gouts et les couleurs...



Techniquement, c'est pas "l'adresse du début de tableau" qu'on passe
(le type serait faux), mais "l'adresse du premier élément à traiter".
Je suis d'accord avec Marc. Je pense aussi qu'utiliser T tab[] au lieu
de T *tab est plus clair et nous rappelle qu'on a bel et bien affaire
à un tableau, et non à un élément simple (T *p).
1 2 3 4