fbpx

Problema #3269 – ReverseWords – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Scrieți funcția având următorul antet:

void ReverseWords(char s[])

Funcția primește ca parametru un șir s format din cuvinte separate prin câte un spațiu. Cuvintele sunt formate doar din litere mici. Funcția va returna, tot prin intermediul parametrului s, cuvintele în ordine inversă, separate tot prin câte un spațiu.

Exemplu

Dup[ apelul ReverseWords("dubai dubai viata ca in rai") șirul s va fi rai in ca viata dubai dubai

Restricții și precizări

  • Lungimea șirului s este de cel mult 800.000 și conține cel puțin două cuvinte
  • șirul poate conține cuvinte de o literă
  • cuvintele din șir sunt separate prin exact un spațiu
  • șirul este indexat de la 0, începe cu o literă și se termină cu o literă
void ReverseWords(char s[]){
    int i = 0, j = 0, cnt = 0;
    while(s[i]){
        if(s[i] == ' '){
            j = cnt;
            cnt = i - 1;
            int cpy = cnt;
            while(j < cnt)
                swap(s[j], s[cnt]), cnt --, j ++;
            cnt = cpy + 2;
        }
        i++;
    }
    j = cnt;
    cnt = i - 1;
    int cpy = cnt;
    while(j < cnt)
        swap(s[j], s[cnt]), cnt --, j ++;
    cnt = cpy + 2;
    int a = 0, b = i - 1;
    while(a < b)
        swap(s[a], s[b]), a ++, b --;
}
Comentarii

S-ar putea sa iti placa