Informatică, întrebare adresată de laurachirila5, 8 ani în urmă

Cerința
Să se scrie o funcţie denumită “extrageCuvant” care să primească ca parametri trei şiruri de caractere în această ordine: destinatie, sursa, separatori şi un număr întreg prin intermediul căruia se va specifica numărul cuvântului ce se doreşte a fi preluat din şirul de caractere sursă şi pus în şirul destinaţie.

În şirul separatori se vor găsi o serie de simboluri ce sunt utilizate pentru a despărţi cuvintele (de exemplu virgulă sau spaţiu, etc.).

Dacă funcţia a copiat cu succes cuvântul căutat în şirul destinaţie, va returna valoarea 1. Altfel va returna valoarea 0 (de exemplu dacă textul conţine doar trei cuvinte şi se doreşte găsirea cuvântului al patrulea).

Date de intrare
Funcţia va primi patru parametri în următoarea ordine: şirul destinaţie, şirul sursă, şirul conţinând lista simbolurilor considerate separatori de cunvinte şi poziţia cuvântului dorit, poziţie indexată de la 0 (primul cuvânt este cel de pe poziţia 0).

Date de ieșire
Funcţia va returna 1 dacă a reuşit să găsească un cuvânt pe poziţia căutată şi în şirul destinaţie va fi copiat acest cuvânt sau 0 în caz contrar.

Restricții și precizări
Nu se va folosi nici o funcţie de prelucrare a şirurilor de caractere (nu se va include string.h).

Aveti vreo idee cum se poate rezolva fara string.h?

Răspunsuri la întrebare

Răspuns de bobo229
6

daca ai nelamuriri nu ezita sa intrebi

#include <iostream>

using namespace std;

bool litera_in_lista(char c, char *lista)

{

   for(int i=0; lista[i]!='\0'; i++)

   {

       if(c==lista[i])

           return true;

   }

   return false;

}

int numar_cuvinte(char *sursa, char *sep)

{

   int suma=0;

   for(int i=0; sursa[i]!='\0'; i++)

   {

       if(litera_in_lista(sursa[i],sep))

               suma+=1;

   }

   return suma+1; //daca avem n separatori atunci avem n+1 cuvinte: ana#are/mere -> 2 separatori, 3 cuvinte

}

int extrageCuvant(char *dest, char *sursa, char *sep, int cuvant)

{

   int nr_cuvinte = numar_cuvinte(sursa,sep);

   if(cuvant>nr_cuvinte)

       return 0;

   int pos=0;

   int k=0;

   for(int i=0; sursa[i]!='\0'; i++)

   {

       if(k==cuvant-1 && !litera_in_lista(sursa[i],sep))

       {

           dest[pos]=sursa[i];

           pos++;

           dest[pos]='\0';

       }

       else

       {

           if(k==cuvant)

           {

               break;

           }

       }

       if(litera_in_lista(sursa[i],sep))

           k++;

   }

   return 1;

}

int main() {

   char sir[100]; //sirul de intrare

   char sep[20]; //separatori

   char dest_sir[100]; //sirul de iesire

   int flag;

   int cuvant;

   cout<<"Sir: ";

   gets(sir);

   cout<<"Separatori ";

   gets(sep);

   cout<<"Nr. cuvantului: ";

   cin>>cuvant;

   flag = extrageCuvant(dest_sir,sir,sep,cuvant);

   if(flag==1)

       cout<<"Sir destinatie: "<<dest_sir<<endl;

   else

       cout<<"Eroare!!!";

   return 0;

}

Alte întrebări interesante