fbpx

Problema #2659 – SplitText – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Să se scrie funcția cu următorul antet:

void SplitText(const char s[], char cuv[100][30], int &n)

Funcția primește ca parametri:

  • un șir de caractere s de lungime maximă 200.
  • o matrice de caractere cuv
  • un număr natural n

Șirul s memorează un text format din cuvinte și separatori. Cuvintele sunt formate din litere, iar restul caracterelor din text sunt separatori. Funcția trebuie să memoreze cuvintele din s în matricea cuv astfel: Primul cuvânt în cuv[0], al doilea cuvânt în cuv[1], etc. Numărul de cuvinte va fi memorat în n.

Restricții și precizări

  • Lungimea maximă a șirului s este 200
  • Șirul s este indexat de la 0
  • Șirul va conține cel puțin un cuvânt
  • Numărul maxim de cuvinte din text este 100
  • Cuvintele textului au lungimea maximă 29
  • Utilizarea funcțiilor predefinite pentru șiruri de caractere poate conduce la erori de compilare

Exemplu

SplitText("O suta de ani ... de Romania!", cuv, n);

Va furniza rezultatul: n=6, cuv[0]="O", cuv[1]="suta", cuv[2]="de", cuv[3]="ani", cuv[4]="de", cuv[5]="Romania".

bool nr(int i ,const char s[])
{
    return ((int)s[i] >= 65 && (int)s[i] <= 90) || ((int)s[i] >= 97 && (int)s[i] <= 122);
}

void SplitText(const char s[], char cuv[100][30], int &n)
{
    n = 0;
    int i = 0 , j=0;
    bool ok=false;
    bool fct= false;
    while(s[i]!='\0')
    {
        if(nr(i , s))
        {
            if(ok)
            {
                if(fct==false)
                n++ , ok = false;
                else
                    ok=false , fct = false;
            }
            cuv[n][j]=s[i];
            j++;
            if(!nr(i+1 , s))
                cuv[n][j]='\0';
        }
        else
        {
            if(i == 0)
                fct=true;
            j=0;
            ok = true;
        }
        i++;
    }
    n++;
}
Comentarii

S-ar putea sa iti placa