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

As dori o rezolvare la nivel de clasa 11 fara subpograme pentru problema 85 de pe pbinfo.Sunt inca la inceput cu sirurile si desi imi merge algoritmul imi
da ceva ciudat la compilare.Las algortimul si textul problemei mai jos:
Să se scrie un program care citește un text și inserează după fiecare vocală caracterul *.
Restrcitii:
şirul de caractere citit va conţine cel mult 100 de caractere, litere mici ale alfabetului englez și spații
se consideră vocale următoarele caractere: a, e, i, o, u.
dacă cuvântul nu conține vocale se va afișa doar mesajul FARA VOCALE

Rezolvarea mea(as avea rugamintea sa imi spuneti de ce imi apar acele paranteze sau caractere ciudate la compilare.Incercati cuvinte precum "arma","accent").:
#include
#include
using namespace std;

int main()
{
char s[201];
int n,i,j,ok=0;
cin.get(s,101);
n=strlen(s);

for(i=0;i<=n-1;i++){
if(s[i]=='a' or s[i]=='e' or s[i]=='i' or s[i]=='o' or s[i]=='u'){
n++;
for(j=n-1;j>=i+1;j--){
s[j]=s[j-1];
}
s[i+1]='*';
ok=1;
i++;
}
}
if(ok==0)
cout<<"FARA VOCALE";
else cout<

Răspunsuri la întrebare

Răspuns de SasLuca
1
Un sir de caractere in C++ se termina cu valoarea 0. Acel 0 e pus la final pentru a stii ca s-a terminat sirul. cin.get() iti va formata sirul si va adauga 0 la final. Exemplu: Pentru cuvantul "apa", s[3] va fi egal cu 0. Tu declari sirul ca fiind de dimensiunea 201, din cauza asta compilatorul va aloca 201 caractere in memorie, chiar daca tu nu le dai o valoare ele tot vor avea una. Tu in timp ce modifici sirul adaugi caractere in el, astfel pozitia valorii 0 ar trebuii sa se schimbe dar tu nu faci asta asa ca la final cand printezi sirul, cum nu mai exista valoarea 0 in sir el va printa pe ecran tot ce se afla in acel sir, adica toate cele 201 caractere. Caractele alea ciudate pe care le vezi tu sunt restul de caractere pe care nu le folosesti dar au fost intializate in memorie.
Ca sa repari rapid programul poti dupa ce iesi din for sa faci s[n] = 0; ca sa stie C++ unde se termina sirul tau :P
Pe viitor insa iti recomand fie sa folosesti o functie de insert predefinita in C++ sau sa iti creezi tu una ca sa eviti astfel de probleme cu inserarea de caractere.

TL;DR (too long, didnt read/varianta scurta):
Sirul tau trebuie sa se termine cu valoarea 0. Deoarece tu scrii peste aceasta valoare si ea nu mai exista cand afisezi sirul vor aparea caractere ciudate. Dupa for adauga s[n] = 0; si nu vei mai avea problema asta.

Uite aici cod de C++ compilat si care functioneaza cu note despre ce ai facut gresit si sugestii:
http://hastebin.com/ukalipeqap.rb

Am atasat un link cu sursa cu explicatii deoarece formatarea codului pe acest website e cancer. :P

thambor: Super.Ms mult!!
thambor: Btw,cum pot sa imi creez o functie?
thambor: Si ce c++ folosesti de arata asa smecher
SasLuca: asta e doar un website pe care poti da paste la cod care sa-l trimiti la altii mai usor
SasLuca: hastebin.com
SasLuca: Daca vrei sa scrii C++ iti recomand visual studio 2015 community. https://www.visualstudio.com/vs/
SasLuca: Uite si un exemplu de problema rezolvata in care folosesti functii. http://hastebin.com/ivapojidaz.cpp
Alte întrebări interesante