Sablon(Pbinfo #135)

Link către problema Sablon

Enunț

Un șir de caractere s este șablon pentru un șir de caractere x dacă are aceeași lungime cu x și este alcătuit numai din caractere ale mulțimii {*,#,?}, iar pe fiecare poziție din s în care apare * în x apare vocală, pe fiecare poziție din s în care apare # în x apare consoană, iar pe fiecare poziție din s în care apare ? în x putem avea orice caracter. Scrieți un program care citește de tastatură două șiruri de cel mult 30 caractere de aceeași lungime care conțin doar litere mici ale alfabetului englez și afișează pe ecran un cel mai bun șablon comun al lor, adică șablonul comun cu număr minim de caractere ?.

Soluția

Pentru a rezolva această problemă sunt necesare cunoștințe despre lucrul cu șiruri de caractere.

Vom avea nevoie, pe lângă cele două șiruri de bază, de un al treilea șir de caractere în care vom construi șablonul. Rezolvarea acestei probleme constă în verificarea elementelor din fiecare șir simultan. Haideți să numerotăm toate verificările prin care vom trece:

  1. Dacă elementul numerotat cu din primul șir este vocală, iar elementul numerotat cu i din al doilea șir este, de asemenea, vocală, atunci elementului numerotat cu i din al treilea șir îi vom atribui caracterul *.

Mică indicație(1): pentru a afla care elemente sunt consoane și care nu, se va folosi funcția strchr().

Dacă una dintre aceste condiții nu este îndeplinită, atunci vom trece la a doua verificare:

2. Dacă elementul numerotat cu i din primul șir sau cel din al doilea este vocală, atunci elementului numerotat cu i din al treilea șir îi vom atribui caracterul ?. De ce? Deoarece, atâta timp cât noi am verificat anterior dacă cele două elemente sunt sau nu vocale, nu mai avem nicio grijă că se poate să ajungem la acest pas, iar cele două elemente să fie, în fapt, vocale.

Mai departe, dacă niciuna dintre aceste condiții nu a fost satisfăcută, atunci înseamnă că cele două elemente sunt neapărat consoane, deci elementului din al treilea șir corespunzător i se va atribui #.

Mică indicație(2): La finalul construirii șirului, nu uita să adaugi după ultimul element caracterul nul! (adică ‘\0’)

Implementare în C++:

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

februarie 2019
L Ma Mi J V S D
« oct.   apr. »
 123
45678910
11121314151617
18192021222324
25262728