ma poate ajuta cineva, va rog sa rezolv aceasta problema ca nu am nicio idee ce sa ii fac? Se consideră o listă liniară simplu înlănţuită alocată dinamic în care fiecare nod memoreazăîn câmpul info un cuvânt format din cel mult 20 de caractere, doar litere mari ale alfabetului englez, iar în câmpul urm, adresa următorului nod al listeisau NULL dacă nu există un element următor. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n≤100) şi apoi ncuvinte distincte, fiecare cuvânt fiind format din cel mult 20 de caractere, doar litere mari ale alfabetului englez, şi construieşte o listă simplu înlănţuită, cu acele cuvinte citite, care încep şi se termină cu aceeaşi literă. Cuvintele se vor memora în listă în ordine inversă citirii lor. Exemplu: pentru n=9 şi cuvintele citite:
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
ifstream fin("listacuv.in");
ofstream fout("listacuv.out");
int n, i, len;
char cuv[22];
struct nod
{
char info[22];
nod *urm;
};
nod *cap=NULL;
void afisare(nod *cap)
{
if (cap==NULL)
fout << "LISTA E VIDA...";
else
{
nod *p=cap;
while (p != NULL)
{
fout << p->info << " ";
p = p->urm;
}
fout << "\n";
}
}
void adauga(char cuv[], nod *&cap)
{
nod *p=new nod;
strcpy(p->info,cuv);
if (cap==NULL)
{
p->urm=NULL;
cap=p;
}
else
{
p->urm=cap;
cap=p;
}
}
int main()
{
fin >> n;
for (i=1; i<=n; ++i)
{
fin >> cuv;
len=strlen(cuv);
if (cuv[0]==cuv[len-1])
adauga(cuv,cap);
}
afisare(cap);
}
Explicație:
am folosit fişiere (e mult mai comod la testările codului,,, nu introduci de la consolă de fiecare dată. Dacă insişti fără fişiere, atunci le ştergi pe ele şi biblioteca fstream, iar în cod inloc de fin şi fout scrii cin şi cout
La citirea cuvintelor verificam dacă respectă cerinţa şi adăugam elementul la capul listei. astfel cuvintele se memorează în listă în ordinea inversă citirii lor