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
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;
}