Meg lehet csinálni a beírt szavakat betűrendbe? (c++)
Az a lényege hogy beírsz egy számot hogy hány szavat fog betűrendbe tenni és kb. itt akadtam el:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int szo, a;
cout << "Add meg, hogy hany szot akarsz beturendbe rakni!" << endl;
cin >> a;
for (int i = 0; i < a; i++) {
cout << i + 1 << ". szo:" << endl;
cin >> szo;
}
system("pause");
return 0;
}
itt az a hiba hogy megadom a méretét és kiírja hogy:
1. szó:
alma //pl
2. szó:
3. szó:
stb.
és nem kéri be külön mindegyiket, mi a baj?
a második kérdésem, hogy hogyan lehetne befejezni a programot úgy, hogy kiírja a szavakat betűrendbe?
mert elkavarodtam
VÁLSZOKAT ELŐRE KÖSZÖNÖM!
Hát pl. az a baj, hogy int-be próbálod tenni a szavakat, aztán meg ráadásul felül is írod minden egyes szó után ugyanazt a változót.
A vector jó ötlet, csak ne int, hanem string adatokból álljon, mivel ugye szavakat raksz bele. Annak meg már nézz utána önállóan, hogyan kell új elemeket belerakni, rendezni és kiíratni.
Mivel gondolom a gyakorlás, tanulás az elsődleges célod, ezért a sorbarendezésnél sajátkezűleg lenne célszerű leimplementálni egy rendezőalgoritmust, hogy tanuld, gyakorold. Mindenesetre azért megmutatom, hogy létezik a C++-ban erre nagyon egyszerű módszer:
std::sort(v.begin(), v.end());
És ez rögtön sorba is rendezi a vektorodat. Ebből viszont túl sokat nem tanulsz, szóval lássunk egy egyszerű rendezési algoritmust. Mondjuk a maximumkiválasztásos keresés, ami viszonylag gyors (legalábbis gyorsabb mint néhány másik alternatíva), ugyanakkor nem nehéz megérteni sem.
ciklus( i:=v.size()-1...1 )
{
max_index := i;
ciklus( j:=0...i-1 )
{
ha (v[j] > v[max_index]
{
max_index := j
}
}
temp := v[max_index]
v[max_index] := v[i]
v[i] := temp
}
Direkt nem c++ kódot írtam, de ebből is elég könnyen átírható egyébként. A lényege röviden az, hogy A külső ciklus minden lépésében kiválasztod az i-edik legnagyobb értéket, majd azt kicseréled az 'i'-edik helyen álló érétkkel. Az 'i' index a vektor utolsó elemétől lépked visszafelé, a 'j' változó pedig az első elemtől az 'i'-edik elemig. Így a ciklus első lépésében a teljes tömbből választod ki a legnagyobb értéket, és kciseréled a vektor utolsó elemével. Ezután már csak a vektor utolsó előtti eleméig keresed a legnagyobb értéket, és az utolsó előtte h elyen levővel cseréled ki, és így haladsz végig a vektoron, hátulról fokozatosan feltöltve a legnagyobb elemekkel, mígnem az egész vektor rendezve van.
Nézegesd, értelmezd, írt le C++ kóddal, és gyakorolj :D
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!