Informatică, întrebare adresată de maarrryyyy, 9 ani în urmă

Va rog scrieţi un program care citeşte de la tastatură un text înlocuind fiecare cuvânt care are lungimea para cu simbolul *. afişează pe ecran textul obţinut sau mesajul nu exista dacă nu sunt cuvinte de lungime para.(c++)


AntiEaglesDavids: tu ce-ai incercat?
maarrryyyy: pai am facut asa: int main()
{char s[100],sep[]=" ",*a,s1[100];
int ok=0,y=0;
cin.get(s,100);
a=strtok(s,sep);
while(a)
{if(strlen(a)%2==0)
{strcat(s1," # ");
ok=1;}
else
{strcat(s1,a);
strcat(s1," ");}
a=strtok(NULL,sep);
}
if(ok==1)
cout<<s1;
else
cout<<"nu exista";
} dar nu e bun fiindca am facut al sir si eu trebuia sa inlocuiesc in sir nu sa formez alt sir si nu stiu cum sa inlocuiesc in sir
AntiEaglesDavids: mai intai trebuie sa initializezi sirul s1 (si s)
AntiEaglesDavids: apoi in loc de " # " sa pui "* " (fara spatiul de inceput si steluta pt ca asta ai in cerinta :) )
AntiEaglesDavids: si nu are nimic daca e alt sir, foloseste strcpy(s, s1) si aia e
maarrryyyy: ok multumesc dar se putea sa se inlocuiasca direct in sirul s fara a mai forma alt sir
AntiEaglesDavids: da
AntiEaglesDavids: am postat pt un singur sir
maarrryyyy: scuze nu am observat

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
3
Ceva de genu:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char s[100]{}, s1[100]{};
    int ok = 0;
    cin.get(s, 100);

    const char sep[] = " ";
    char* a = strtok(s, sep);

    while (a)
    {
        if (strlen(a) % 2 == 0)
        {
            strcat(s1, "* ");
            ok = 1;
        }
        else
        {
            strcat(s1, a);
            strcat(s1, " ");
        }

        a = strtok(nullptr, sep);
    }

    if (ok == 1)
        cout << s1;
    else
        cout << "nu exista";
}

Cu un singur sir, desi nu sunt sigur daca pe alte compilatoare rezultatul va fi la fel:

#include <iostream>
#include <cstring>

int main()
{
    const int lgMax = 100;

    char s[lgMax]{};
    std::cin.get(s, lgMax);
    size_t lg = std::strlen(s);
    bool ok = false;

    for (size_t i = 0, cuvlg = 0; i < lg + 1; ++i) {
        if (std::isalpha(s[i]))
            ++cuvlg;
        else  {
            if (cuvlg % 2 == 0 && cuvlg) {
                std::strcpy(s + i - cuvlg, s + i - 1);
                s[i - cuvlg] = '*';
                lg = strlen(s);
                i -= cuvlg + 1;
                ok = true;
            }

            cuvlg = 0;
        }
    }

    if (ok)
        std::cout << s;
    else
        std::cout << "nu exista";
}




AntiEaglesDavids: stiu, arata naspa codu', nu prea am avut timp sa stau la el
maarrryyyy: multumesc mult
Alte întrebări interesante