👤



Daca se poate si explicata va rooog frumoos.
Scrieţi programul C/C++ care citeşte de la tastatură un text cu cel mult 100 de caractere şi
un cuvânt cu cel mult 15 litere. Pe ecran se va afişa şirul obţinut prin inserarea în textul
iniţial a caracterului ? după fiecare apariţie a cuvântului citit. Literele textului şi ale cuvântului
sunt litere mici ale alfabetului englez. Dacă în text nu apare cuvântul citit, se va afişa
mesajul NU APARE.
Exemplu: dacă se citeşte de la tastatură textul
examenului examenul de bacalaureat si examenul de atestat
şi cuvântul examenul
se va afişa:
examenului examenul? de bacalaureat si examenul? de atestat



Răspuns :

#include <iostream>

#include <string.h>

using namespace std;

int main()

{cin.get (s, 101);

cin.get ();

cin>>c;

char *p, s1[150];

if(strstr(s,c)==0)

cout<<"Nu apare";

else

{ p=strtok(s," ")

while(p!=NULL)

{ strcat(s1,p);

if(strcmp(p,c)==0)

{ strcat(s1,"?");

strcat(s1," "); } }

p=strtok(NULL," "); }

strcpy(s,s1);

cout<<s;

return 0; }

Răspuns:

#include <iostream>

#include <string.h>

using namespace std;

char s[101], c[16];

int main()

{

   cin.get (s, 101);

   cin.get ();

   cin>>c;

   char *p, s1[150]="";

   if(strstr(s,c)==0)

       cout<<"Nu apare";

   else

 {

       p=strtok(s," ");

  while (p!=NULL)

  {

                       strcat(s1,p);

   if(strcmp(p,c)==0)

   {

                           strcat(s1,"?");

                       }

                      strcat(s1," ");

                     p=strtok(NULL," ");

                 }

   }

   strcpy(s,s1);

   cout << s;

   return 0;

}

Explicație:

vin cu redactări a codului creat de domnişoara Cosmaandra2000. Sper că nu se va supăra...

Explicaţii a codului meu (şi a domnişoarei Cosmaandra2000 :))) )

Se declară global variabilele s şi c pentru text şi cuvânt. Se citeşte textul în s, sfîrşitul de linie ( cin.get ();  ) şi cuvântul în c. Se declară noi variabile, pointerul *p la caracter şi s1 un şir de caractere unde se va crea răspunsul aşteptat. Deoarece s1 nu e declarată global, aici în main ea trebuie iniţializată ca şir vid.

Urmează verificarea dacă cuvântul solicitat e prezent în text. Asta se face cu funcţia predefinită strstr(s,c) care caută dacă c se conţine în s. La răspuns "nu", funcţia returnează 0, iar la răspuns "da" returnează prima poziţie de situare a subşirului în şir.

În caz că cuvîntul este prezent în text, se divide textul în cuvinte cu ajutorul funcţiei strtok. Cuvintele se lipesc în s1 cu ajutorul funcţiei strcat. Dacă cuvîntul selectat coincide cu cel solicitat atunci după el se adaugă în s1 caracterul "?". Evident după fiecare cuvînt se mau adaugă spaţiu.

Şi în final se face o copie a lui s1 pe s cu strcpy.

Trebuie de menţionat că în enunţ nu s-a accentuat care este structura textului, că cvintele sunt despărţite prin spaţiu

Pentru cazul cînd ai probleme cu copy/paste a codului postat îţi dau şi link-ul de pe pastebin a sursei:

https://pastebin.com/SV9Fi5Sr

p.s. Cu toată stima, dar codul domnişoarei nu mergea.. are cîteva scăpări, se vede că nu a fost testat

Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.


Wix Learning: Alte intrebari