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...)
C: Siruri de caractere - aplicatii rezolvate
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(); }