Chaînes de caractères en C - Applications résolues


1) Realiser un programme pour montrer la difference entre 'A' et "A".
#include<stdio.h>
#include<conio.h>
void main()
{
char a1='A';
char a2[]="A";
printf("%c %c %s",a1,a2[0],a2); 	  //afficher le contenu de deux variables
printf("\n%d %d",sizeof(a1),sizeof(a2)); //on verifie la memoire occupee par les deux variables
printf("\n%s c'est a dire %d",a2[1],a2[1]); 	//on voit le deuxiem element
getch();
}

2) D'élaborer un programme qui affiche dans une chaîne de caractères les majuscules de l'alphabet et traite sur lui.
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	char a[256];
	for(int i=0;i<26;i++)
		a[i]='A'+i;
	
	puts("La chaine contient:");
	printf("\"%s\"",a);
 
	//on veut ajouter a la fin le caractere '1' et afficher de nouveau la chaine
	a[26]='1';
	a[27]='2';
	a[28]=0;
	printf("\n\"%s\"",a);
 
	//afficher le nombre des caracteres de la chaine
	printf("\nLe nombre de caracteres est %d",strlen(a));
 
	//afficher la chaine en commencant avec le deuxieme element jusqu’au dixieme
	a[10]=0; //sau NULL
	printf("\n\"%s\"",a+1); // !!! ne mettez pas a++
	printf("\n\"%s\"",a+6);
 
	//afficher de nouveau le nombre de de caracteres de la chaine
	printf("\nNombre de caracteres est%d",strlen(a));
 
	/*introduire une nouvelle variable p qui va retenir l’adresse du vecteur de caracteres 
	a le nom du vecteur (a) c’est l’adresse et c’est la meme adresse du premier element a[0]*/
	char *p;
	p=a; /*cette attribution est correcte, la variable p retient l’adresse du vecteur de caracteres a, 
	c’est a dire l’adresse du premier octet. 
	En place, l’attribution a=p n’est pas correcte cat a est une constante */
 
	//apres l’attribution on peut utiliser p dans les memes conditions que a
	printf("\n%s",p);
	// quatre relations de trouver adresse de vecteur équivalents
	printf("\n%p",p);
	printf("\n%p",a);
	printf("\n%p",&p[0]);
	printf("\n%p",&a[0]);
 
	/* si au contenu de la variable p on ajoute 1, elle va retenir l’adresse du vecteur  
	dont le premier element c’est comme le deuxiem octet (element) du vecteur */
	printf("\n%s",++p); //p++; printf("\n%s",p);
	printf("\n%s",p++);
 
	//deux adresses equivalentes
	printf("\n%p",p);
	printf("\n%p",&a[2]);
 
	//le nouveau vecteur peut s’adresser sur les octets
	printf("\n%c",p[0]); //va afficher l’element'C'
	printf("\n%c",p[-2]); //va afficher l’element'A'

	/* on peut faire des dim inutions entre les adresses. 
	Dans ce cas, le resultat est un antier et par p-a on obtient indice en a du premier octet retenu en p */
	printf("\n%d",p-a);
 
	getch();
}

3) Difference entre le type chaine qui represente des caracteres et le type adresse pour memorisation d’une chaine de caracteres.
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	char a[]="Salut C!"; // chaine des elements qui representent caracteres
	char* b="Salut C!"; // type adresse pour memorises une chaine de caracteres
	puts(a);
	puts(b);
	printf("%d",sizeof(a));
	printf("\n%d",sizeof(b));
	getch();
}

4) En lecturant une chaine du clavier, afficher par chaque caractere et determiner le nombre de caracteres et en prenant une autre chaine, l’ajouter ou copier dans la premiere chaine.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
	char* a; //chaine introduite par l’utilisateur
	int i; //indexe de la chaine

	a=(char*)malloc(sizeof(char)*255) ;
 
	printf("Entrez une chaine et appuyez sur Entree \n");
	gets(a); //scanf("%s",&a);
 
	//Aficher chaque caractere jusqu’a trouver NULL
	for(i=0;a[i]!=NULL;i++)
	putchar(a[i]);
	//sau printf("%c",a[i]);
	printf("\nNombre de caracteres est %d c’est a dire %d",i,strlen(a)); //on ne compte pas le caractere NULL
 
	//je veux introduire une nouvelle chaine de caracteres
	char b[]=" autre chaine";
	strcat(a,b); //j’ajoute la chaine d’adresse b a la chaine a (realizer leur concatenation)
	printf("\nnouveau chaine a est \"%s\"",a); // or puts("La nouvelle chaine est"); puts(a);
	strcpy(b,a); //copier la chaine a dans b
	puts("\nLa nouvelle chaine b est:");
	puts(b);
 
	//comparer de deux chaines
	printf("%d",strcmp(a,b));
 
	getch();
}

5) Determiner le nombre des mots d’un texte.
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	int k=0;
	char txt[1024]; //Chaine intyroduite par l’utilisateur
	char* p;
 	printf("Introduire une chaine de caracteres et appuyer Entree\n");
	gets(txt); //scanf("%s",&txt);

	p=strtok(txt," ");
		while (p!=NULL)
	{
		p=strtok(NULL, " ");
		k++;
	} 
	printf("\nLe nombre des mots est: %d",k); //on ne compte pas le c aractere NULL

	getch();
}

6) Determiner le nombre de mots d’un texte, avec une fonction propre.
#include<stdio.h>
#include<string.h>
#include<conio.h>

int separare(char* txt, char* p)
{
	int k=0;
	p=strtok(txt," ");	
	while (p!=NULL)
	{
		p=strtok(NULL, " ");
		k++;
	}
	return k;
}
void main()
{
	int k;
	char txt[1024]; //chain introduite par l’utilisateur
	char p; 
	printf("Introduire une chaine de caracteres et appuyez Entree\n");
	gets(txt); //scanf("%s",&txt);

	printf("\nLe nombre de mots est: %d",separare(txt,&p)); //on ne compte pas le caractere NULL

	getch();
}

7) Realiser un programme qui lit dans une chaine n mots. Elles seront triees alfabetique.
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>

/* Il y a des applications quand il doit travailler avec n mots – en comprenant par le caractere 
une succession de caracteres  qui ne sont pa sblanches. Danc ce cas on a la possibilite de declarer 
les vecteurs de mots. Ce sont en fait des matrices avec des elements de base de type char. */
 
void main()
{
char mots[10][25];	/* chaque ligne de 10 de cette matrice peut retenir une chaine de type char*. 
		Elle peut avoir le plus 25 de caracteres (avec le nul). 
		On peut adreser les mots par a[0] (le premier mot), a[1] (le deuxiem mot) etc*/
	char *aux;
	int i,n,trouve; 
	printf("Donnez le nombre des mots: "); 
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		printf("mot: ");
		scanf("%s",&mots[i]); 
	} 
	do
	{ 
		trouve=0;
		for(i=0;i<n-1;i++)
			if ( strcmp(mots[i],mots[i+1]) > 0 )
			{
				strcpy(aux,mots[i]);
				strcpy(mots[i],mots[i+1]);
				strcpy(mots[i+1],aux);
				trouve=1;
			}
	} while (trouve); 
	for(i=0;i<n;i++)
	printf("\n%s",mots[i]);
	getch();
 
}
Cookies help us deliver our services. By using our services, you agree to our use of cookies.