C: Siruri de caractere - aplicatii rezolvate


1) Să se realizeze un program care arată diferenţa dintre 'A' si "A" (rezolvare...)

2) Să se realizeze un program care afiseaza intr-un sir de caractere literele mari ale alfabetului si face prelucrari asupra acestuia (rezolvare...)

3) Diferenţa între tipul şir de elemente ce reprezintă caractere şi tipul adresă pentru memorarea unui şir de caractere (rezolvare...)

4) Citindu-se un sir de la tastatura sa se afiseze caracter cu caracter si sa se determine numarul de caractere şi dându-se un alt sir acesta sa se adauge sau sa se copieze in primul sir (rezolvare...)

5) Sa se determine numarul de cuvinte dintr-un text (rezolvare...)

6) Sa se determine numarul de cuvinte dintr-un text, folosind o functie proprie (rezolvare...)

7) Să se realizeze un program care citeste intr-un sir n cuvinte. Acestea vor fi sortate alfabetic (rezolvare...)


Rezolvari

#include<stdio.h>
#include<conio.h>
void main()
{
char a1='A';
char a2[]="A";
printf("%c %c %s",a1,a2[0],a2); 	  //afisam continutul celor doua variabile
printf("\n%d %d",sizeof(a1),sizeof(a2)); //verificam memoria ocupata de cele doua variabile
printf("\n%s adica %d",a2[1],a2[1]); 	//vedem care este cel de-al doilea element
getch();
}


#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("Sirul de caractere contine:");
	printf("\"%s\"",a);
 
	//dorim ca la sfarsit sa adaugam caracterul '1' si sa reafisez sirului
	a[26]='1';
	a[27]='2';
	a[28]=0;
	printf("\n\"%s\"",a);
 
	//afisez numarul de caractere ale sirului
	printf("\nNumarul de caractere este %d",strlen(a));
 
	//afisez sirul incepand cu al doilea element si pana la al zecelea
	a[10]=0; //sau NULL
	printf("\n\"%s\"",a+1); // !!! nu puneti a++
	printf("\n\"%s\"",a+6);
 
	//reafisez numarul de caractere ale sirului
	printf("\nNumarul de caractere este %d",strlen(a));
 
	/*introduc o noua variabila p care va retine adresa vectorului de caractere a numele
	 vectorului (a) este insusi o adresa si este aceeasi cu adresa elementului prim, adica a[0]*/
	char *p;
	p=a; /*aceasta atribuire este corecta, variabila p retinand adresa vectorului de caractere a, adica 
	adresa primului sau octet. In schimb, atribuirea a=p este incorecta pt. ca a este o data constanta */
 
	//dupa atribuire putem utiliza p in aceleasi conditii ca si a
	printf("\n%s",p);
	//patru relatii echivalente de afisare a adresei vectorului
	printf("\n%p",p);
	printf("\n%p",a);
	printf("\n%p",&p[0]);
	printf("\n%p",&a[0]);
 
	/* daca la continutul variabilei p se adauga 1, aceasta va retine adresa vectorului  
		al carui prim element coincide cu al doilea octet (element) al vectorului */
	printf("\n%s",++p); //p++; printf("\n%s",p);
	printf("\n%s",p++);
 
	//doua adrese echivalente
	printf("\n%p",p);
	printf("\n%p",&a[2]);
 
	//noul vector se poate adresa si pe octeti
	printf("\n%c",p[0]); //va afisa elementul 'C'
	printf("\n%c",p[-2]); //va afisa elementul 'A'

	/* se pot face si scaderi intre adrese. In acest caz rezultatul este unul intreg 
	 si prin p-a se obtine indicele in a al primului octet retinut in p */
	printf("\n%d",p-a);
 
	getch();
}


#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	char a[]="Salut C!"; // sir de elemente ce reprezinta caractere
	char* b="Salut C!"; // tipul adresa pentru memorarea unui sir de caractere
	puts(a);
	puts(b);
	printf("%d",sizeof(a));
	printf("\n%d",sizeof(b));
	getch();
}


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
	char* a; //sir introdus de utilizator
	int i; //indexul sirului

	a=(char*)malloc(sizeof(char)*255) ;
 
	printf("Introduceti un sir de caractere si apoi apasati Enter\n");
	gets(a); //scanf("%s",&a);
 
	//Afiseaza fiecare caracter pana cand gaseste pe NULL
	for(i=0;a[i]!=NULL;i++)
	putchar(a[i]);
	//sau printf("%c",a[i]);
	printf("\nNumarul de caractere este %d adica %d",i,strlen(a)); //nu se numara caracterul NULL
 
	//doresc sa introduc un nou sir de caractere
	char b[]=" alt sir";
	strcat(a,b); //adaug sirul de adresa b la sirul a (realizez concatenarea celor doua)
	printf("\nNoul sir a este \"%s\"",a); // sau puts("Noul sir a este"); puts(a);
	strcpy(b,a); //copiaza sirul a in b
	puts("\nNoul sir b este:");
	puts(b);
 
	//se compara cele doua siruri
	printf("%d",strcmp(a,b));
 
	getch();
}


#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	int k=0;
	char txt[1024]; //sir introdus de utilizator
	char* p;
 	printf("Introduceti un sir de caractere si apoi apasati Enter\n");
	gets(txt); //scanf("%s",&txt);

	p=strtok(txt," ");
		while (p!=NULL)
	{
		p=strtok(NULL, " ");
		k++;
	} 
	printf("\nNumarul de cuvinte este: %d",k); //nu se numara caracterul NULL

	getch();
}


#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]; //sir introdus de utilizator
	char p; 
	printf("Introduceti un sir de caractere si apoi apasati Enter\n");
	gets(txt); //scanf("%s",&txt);

	printf("\nNumarul de cuvinte este: %d",separare(txt,&p)); //nu se numara caracterul NULL

	getch();
}


#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>

/* Exista aplicatii in care este necesar sa se lucreze cu n cuvinte – intelegand prin caracter
o succesiune de caractere care nu sunt albe. In acest caz avem posibilitatea sa declaram vectori
de cuvinte. Acestea sunt, de fapt, matrice cu elemente de baza de tip char. */
 
void main()
{
char cuvinte[10][25];	/* fiecare linie din cele 10 ale matricei poate retine un sir de tipul char*.
				Acesta poate avea cel mult 25 de caractere (inclusiv caracterul nul). 
		Cuvintele pot fi adresate prin a[0] (primul cuvant), a[1] (cuvantul al doilea) etc*/
	char *aux;
	int i,n,gasit; 
	printf("Dati numarul de cuvinte: "); 
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		printf("cuvant: ");
		scanf("%s",&cuvinte[i]); 
	} 
	do
	{ 
		gasit=0;
		for(i=0;i<n-1;i++)
			if ( strcmp(cuvinte[i],cuvinte[i+1]) > 0 )
			{
				strcpy(aux,cuvinte[i]);
				strcpy(cuvinte[i],cuvinte[i+1]);
				strcpy(cuvinte[i+1],aux);
				gasit=1;
			}
	} while (gasit); 
	for(i=0;i<n;i++)
	printf("\n%s",cuvinte[i]);
	getch();

}
Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.