Pagina informaticii

Teste de informatică pentru liceu, articole C#, C/C++, PHP

Şiruri de caractere - utilizarea funcţiei strtok

1. Se consideră un text de lungime maximă 255. Textul conţine mai multe entităţi (cuvinte) care sunt despărţite printr-unul sau mai mulţi separatori din mulţimea { ,  .  ;  :  !  ?}.

  1. Să se citească un astfel de text din fişierul date.in şi să se memoreze fiecare cuvânt într-un vector de cuvinte. Numărul cuvintelor din text este între 2 şi 100, iar cuvintele din text au lungimea maximă 15.
  2. Să se afişeze numărul de apariţii ale cuvântului calculator;
  3. Să se afişeze cuvintele care conţin subcuvântul ini;
  4. Să se determine şi să se afişeze cuvântul cel mai mic din punct de vedere lexicografic;
  5. Să se afişeze inversat fiecare cuvânt;
  6. Să se afişeze toate cuvintele care se termină cu ‘a’ ;
  7. Să se elimine din vectorul de cuvinte toate cuvintele care au lungimea mai mică sau egală cu 3;
  8. Să se ordoneze alfabetic cuvintele şi să se afişeze rezultatul ordonării.


2. Se dau două cuvinte s şi t. Să se verifice dacă s şi t sunt identice, eventual prin permutarea circulară a caracterelor lui s. De exemplu, s=’tasta’ şi t=’tatas’ sunt identice.

3. Se consideră un şir de caractere de forma “x=a+b” , unde a şi b sunt numere. Să se afişeze valoarea acestei sume. De exemplu, pentru “x=15+127” , se va afişa “x=142”. (Indicaţie: se poate utiliza funcţia int atoi(s), care converteşte şirul s, ce memorează numai cifre, şi returnează numărul obţinut)

Rezolvare
1. a)
#include<fstream.h>
#include<string.h>

int main()
{
 char text[101],*car=",. :;!?",*p;
 char cuv[101][16];
 int n=0;
 ifstream f("date.in") ;
 f.get(text,100);
 f.close() ;
 // sirul "car" contine separatorii. text este format din mai multe
 // entitati separate prin unul din caracterele din "car".
 // Functia inlocuieste separatorii prin caracterul NULL si furnizeaza ca
 // rezultat un pointer catre primul caracter al primei entitati
 p = strtok(text,car);
 while (p)
 {
  strcpy(cuv[n],p);
  n++;
  p = strtok(NULL,car);
 }
 for (int i=0 ; i<n ; i++)
   cout<<cuv[i]<<"\n";
 return 0 ;
}

Despre autor
Author

Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică

Scrie un comentariu
Nume:

Comentariu:

15 + 10 =