Jump to content
Tilt

Problema C++

Recommended Posts

Scrie?i un program C/C++ care citeste de la tastatur? un num?r natural n (2?n?20) si apoi n

cuvinte distincte, fiecare fiind format din cel mult 20 de caractere, numai litere mici ale

alfabetului englez. La introducerea datelor, dup? fiecare cuvânt se tasteaz? Enter. Programul

afiseaz? pe ecran num?rul de cuvinte dintre ultimele n-1 citite, care încep cu primul cuvânt

citit.

Exemplu: dac? n=5 si cuvintele citite sunt:

bun

buncar

bunici

abundent

bunavoie

pe ecran se afiseaz? 3 (deoarece numai cuvintele buncar, bunici si bunavoie încep cu

bun).

se poate rezolva in 2 moduri una cu functii si una fara ? daca da cum ? :) eu unul m-am blocat

Link to comment
Share on other sites

Pai relativ simplu.

Intr-un int salvezi numarul de cuvinte ce trebuie introduse(n-ul)

Creezi un vector de string-uri(pentru a intera mai usor prin ele).

faci o functie care preia ca si parametri , prin referinta, 2 vectori de stringuri, primul vector este vectorul cu cele n cuvinte iar al 2-lea este un vector gol.

Faci un loop de la al 2-lea la ultimul cuvant si vezi daca cautarea primului cuvant in celelalte cuvinte returneaza = 0(adica prima pozitie). Daca returneaza prima pozitie atunci incrementezi un contor si adaugi cuvantul respectiv in cel de-al 2-lea vector.

La sfarsit returnezi numarul de cuvinte gasite.

Printezi pe ecran rezultatul functiei si poti printa si cele 3 cuvinte.

Link to comment
Share on other sites

Uite programul in C (fara vectori):


#include <stdio.h>
#include <string.h>

void main() {
int n, cnt = 0;
char root[20], cuvant[20];

printf("n=");
scanf("%d", &n);

// Citim primul cuvant (cuvant radacina) si decrementam n
scanf("%s", root);
n--;

// Repetam pana cand n != 0, citim cuvintele si numaram cele care incepu cu root
while (n) {
scanf("%s", cuvant);

// Daca adresa de memorie unde se afla substringul gasit e egal cu adresa de inceput a stringului mare
if (strstr(cuvant, root) == cuvant)
cnt++;
n--;
}

printf("%d", cnt);
}

Link to comment
Share on other sites

Uite programul in C (fara vectori):


#include <stdio.h>
#include <string.h>

void main() {
int n, cnt = 0;
char root[20], cuvant[20];

cout<<"n= ";
cin>>n;

// Citim primul cuvant (cuvant radacina) si decrementam n
cin>>root;
n--;

// Repetam pana cand n != 0, citim cuvintele si numaram cele care incepu cu root
while (n) {
cin>>cuvant;

// Daca adresa de memorie unde se afla substringul gasit e egal cu adresa de inceput a stringului mare
if (strstr(cuvant, root) == cuvant)
cnt++;
n--;
}

cout<<cnt;
}

Codul in C++...

Cine stie, poate nu stie C...zic si eu :P

Link to comment
Share on other sites

Cred ca poti fi mai drastic cu eliminarea

(cum a facut @totti)

Poti chiar sa elimini cuvantul ca solutie daca una din literele din radacina nu coincid. (pt viteza ridicata).

Probabil rezolvarea scolara are ca principiu memorarea tuturor cuvintelor (intr-o martice).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...