CATEGORII DOCUMENTE |
SIRURI DE CARACTERE
1. SCOPUL LUCRARII
In aceasta lucrare se prezinta aplicatii cu siruri de caractere (stringuri).
2. BREVIAR TEORETIC
Stringurile sunt vectori de caractere. Pentru a indica sfarsitul sirului, limbajul C foloseste drept caracter final al sirului, caracterul nul (octet de valoare 0 ). Acesta se poate reprezenta si prin secventa escape '0'.
O variabila de tipul string cel mai adesea se declara ca vector de caractere. Exemplu:
char s[4];
In acest caz dimensiunea vectorului trebuie sa fie mai mare cu cel putin o unitate decat lungimea maxima a sirurilor ce urmeaza a fi memorate in variabila string respectiva.
In cazul variabilei s din exemplul dat, se pot memora siruri de maxim 3 caractere.
Variabila sir poate fi initializata inca din faza de declarare ca in exemplul urmator:
char s[4]="abc";
Exista o serie de functii ce realizeaza operatii asupra sirurilor de caractere.
Pentru citirea stringurilor de la tastatura se poate folosi functia scanf cu specificatorul de format %s, sau functia gets. Cu functia scanf, spre deosebire de functia gets, nu se pot citi siruri ce contin in interiorul lor caracterul blank. (La functia scanf caracterele blank, TAB si ENTER sunt separatori intre campurile de citire).
Biblioteca standard furnizeaza un numar de functii de procesare stringuri, ce au prototipurile declarate in fisierul header string.h . Dintre acestea, cele mai utilizate sunt:
- functia strcpy ce are prototipul:
char * strcpy(char * p, char * const q);
copiaza sirul q in sirul p. Functia returneaza un pointer spre copia nou creata.
- functia strlen ce are prototipul:
int strlen(const char * s);
returneaza numarul de caractere din sirul s (lungimea sirului). In lungimea sirului nu este inclus si caracterul terminal '0'. Astfel sirul "abcd" are lungimea, returnata de functia strlen, de 4 caractere si nu de 5.
-functia strcmp ce are prototipul:
int strcmp(const char * p, const char * q);
compara stringurile p si q din punct de vedere al ordinei lexicografice. Functia strcmp returneaza valoarea 0 - daca cele 2 stringuri p si q, sunt egale, returneaza un numar negativ - daca primul sir precede lexicografic (este mai mic) decat cel de-al doilea, sau returneaza un numar pozitiv daca al doilea sir precede pe primul.
3. DESFASURAREA LUCRARII
Se vor edita si apoi executa programele descrise in continuare.
Programul nr. 1
Se citeste de la tastatura un sir de caractere. Sa se afiseze cate cifre contine sirul.
Pentru a testa daca un caracter ASCII este cifra, se foloseste functia de biblioteca isdigit(). Aceasta functie are prototipul:
int isdigit(int c);
Ea returneaza 0, daca argumentul ei ( variabila c ) nu este codul ASCII al unei cifre. Daca este cod de cifra, returneaza un intreg nenul.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h> //fisier in care este declarata functia
//isdigit()
void main(void)
Programul nr. 2
Se citeste de la tastatura un sir de caractere. Sa se afiseze daca este palindrom (simetric fata de mijlocul lui).
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(void)
if(esteSimetric)printf("Este palindrom"):
else printf("Nu este palindrom");
getch();
Programul nr. 3
Se citeste de la tastatura un sir de caractere. Sa se afiseze daca sirul are toate caracterele diferite intre ele sau nu.
Sursa programului:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
printf('DA., are toate caracterele diferite.');
getch();
Programul nr. 4
Se citeste de la tastatura un sir de caractere s1. Sa se construiasca sirul s2, obtinut prin inversarea sirului s1.
Exemplu: daca s1="mar" atunci s2="ram".
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(void)
Programul nr. 5
Se citesc de la tastatura, sub forma de siruri de caractere, doua numere naturale foarte mari. Sa se afiseze care numar este mai mare.
Sursa programului:
#include <stdio.h>
#include <string.h>
void main()
if(L2>L1)
//Sirurile au aceeasi lungime, comparam cifrele corespunzatoare
// intre ele. Incepem cu cea mai semnificativa cifra (pozitia i=0):
for(int i=0;i<L1;i++)
if(cifra_nr2>cifra_nr1)
}
printf('nr1 = nr2'); //Singura posibilitate ramasa:
Programul nr. 6
Se citeste un sir s1. Sa se construiasca sirul s2 ce contine, in aceeasi ordine, cifrele ce apar in s1.
Exemplu: daca s1="a1b3" atunci s2="13".
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main(void)
//terminatorul de sir, pentru s2:
s2[j]=0;
//afisare sirul s2 construit:
if(j>0)printf('%s',s2);
else printf('Nu exista cifre in sirul s1 !');
getch();
Programul nr. 7
Se citesc de la tastatura, in trei variabile sir de caractere, numele unui director (folder), numele unui fisier (fara extensie) si extensia lui. Sa se construiasca intr-o alta variabila sir, numele complet al fisierului.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
Programul nr. 8
Se citesc N cuvinte de la tastatura, intr-un vector de stringuri. Sa se sorteze in ordine alfabetica acest vector.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef char string80[81];
#define N 5 //numarul de cuvinte
void main()
//sortare cu metoda bubble sort:
int ultim=N-1;
for(;;)
if(suntInv==0)break;
else ultim--;
}
//afisare vector sortat:
for(i=0;i<N;i++)
printf('n%s',A[i]);
getch();
Programul nr. 9
Sa se cripteze un sir citit de la tastatura, dupa algoritmul introdus de Louis Mansfiel, in 1936. La acest tip de criptare, fiecare litera este inlocuita cu doua vocale. Toate literele alfabetului englez, sunt plasate in celulele unei matrici patrate de 5 linii si 5 coloane. Pe marginile acestui patrat se aseaza cele 5 vocale, astfel:
A E I O U
A a b c d e
E f g h i/j k
I l m n o p
O q r s t u
U v w x y z
Literele i sau j se codifica la fel.
O litera oarecare din cele 25 din matrice, va fi substituita in textul criptat de cele 2 vocale: cea de pe linie si cea de pe coloana literei din matrice.
Astfel, caracterul x se codeaza cu perechea de vocale: UI .
Orice alt caracter diferit de litera, se lasa neschimbat in textul criptat.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main()
char V[5]=;//vectorul vocalelor folosit in criptare.
int c;
int gasit;//semafor pentru cautarea liniara
int lin,col;
int i;//index in sirul s
int j;//index in sirul sCriptat
j=0;
for(i=0;i<strlen(s);i++)
else
if(gasit==1)break;
}//for
sCriptat[j]=V[lin];
j++;
sCriptat[j]=V[col];
j++;
}//else
}//a fost litera
else
}//for i
//terminatorul de sir pentru sirul sCriptat:
sCriptat[j]=0;
printf('%s',sCriptat);
getch();
4. PROBLEME PROPUSE
1. Se citeste un sir de la tastatura. Sa se afiseze ultima vocala din sirul citit.
2. Se citeste un sir de caractere de la tastatura. Sa se roteasca tot sirul spre stanga cu o pozitie.
Exemplu:
Sirul citit: 'abcd'
Dupa rotatie: 'bcda'
3. Se citeste un sir de la tastatura. Sa se afiseze care este vocala ce apare de cele mai multe ori in sir.
4. Se citeste un sir de caractere de la tastatura. Sa se afiseze daca in sir exista sau nu doua cifre alaturate.
5. Se citesc doua cuvinte de la tastatura. Sa se afiseze daca cel de-al doilea este anagrama primului (o permutare a caracterelor primului sir ).
6. Se citeste un numar natural de la tastatura. Numarul putand fi foarte mare, citirea lui se va face sub forma de sir. Sa se calculeze si afiseze care este cifra maxima din numar.
7. Se citeste un sir s1 de la tastatura. Sa se construiasca sirul s2 ce contine in ordinea aparitiei, caracterele din sirul s1, luate o singura data. Exemplu: daca sirul s1 este: CALCULATOR atunci sirul s2 este: CALUTOR.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2431
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved