Van egy program de elakadtam, nem tudom meg fogalmazni a feltételt az if-ben hogyan kellene? (nem bonyolult program, alap szövegkezelés c#)
itt a program:
az "EZT NEM TUDOM" rész amit nem tudom meg fogalmazni
papíron leírtam de meg fogalmazni c#-nak nem megy
string mondat;
string szo;
int a = 0;
Console.WriteLine("Írj be egy mondatot!");
mondat = Console.ReadLine();
Console.Write("Keresett szó: ");
szo = Console.ReadLine();
Console.WriteLine();
for (int i = 0; i < mondat.Length; i++)
{
if (EZT NEM TUDOM )
{
a++;
}
}
if (a>0)
Console.WriteLine("Szerepel benne a szó");
else
Console.WriteLine("Nem szerepel benne a szó");
Console.ReadKey();
A string bejárásánál karakterenként járja be a ciklus -> a for ciklusod minden karakterre lefut. Így a mondat[i] egy karakter lesz, azt nem tudod összehasonlítani egy szóval.
A mondatot splittelni kell egy tömbbé, így egy szavakból álló tömböd lesz
string[] szavak = mondat.Split();
ezután a ciklus:
for (int i=0; i<szavak.Length; i++) {
if (szavak[i] == szo) {
a++;
}
}
Namost ezt többféleképpen is megcsinálhatod, attól függően, mennyire akarod, hogy a C# kinyalja a segged :D
Ha te magad akarod leimplementálni a keresőalgoritmust, akkor két ciklusra lesz szükséged, nem egyre.
A külső ciklusban a mondatban karakterről karakterre lépkedsz, és összehasonlítod az aktuális karaktert a megadott szó első karakterével. Ha egyezés van, mondjuk az n-edik indexen, akkor indítod a belső ciklust, ami a mondat n-től kezdődő karaktereit összehasonlítja a megadott szó soron következő karakterével, és akkor áll le, ha nincs egyezés valamelyik karakteren, vagy ha véget ért valamelyik string. Ha ez a ciklus végigfut a szó összes karakterén, akkor a szó szerepel benne, egyéb esetben a külső ciklus lép tovább. Lehetne ezt még tovább finomítani, optimalizálni, de a lényeg kb ez.
Aztán ott van az egy fokkal egyszerűbb manőver, amikor is a String.Substring metódust használod. Ez esetben elég egy ciklus is. A String.SubString egy stringnek egy részletét tudod kiválasztani. Lét paraméterrel ellátható, az első paraméter azt mondja meg, hanyadik indextől, a második pedig, hogy hány karaktert vegyen. Tehát annyi a dolgod, hogy végigmész a mondaton, és minden i indexre meghívod a Substring(i,szo.Length) metódust, és összehasonlítod a szóval magával. Ha egyezik, akkor szerepela szó, ha nem egyezik, mész tovább, egészen i=(mondat.Length-szo.Length) értékig (A Substring metódus csúnya exceptiont fog dobni, ha túlmész vele az eredeti stringen, szóval tessék figyelni).
Harmadik, legegyszerűbb opció, még ciklus se kell hozzá. String.IndexOf metódus. Nemes egyszerűséggel beadod a metódusnak a szót, és megmondja, hogy a mondatban hanyadik indextől kezdve található meg. Ha pedig nincs benne, akkor -1 a visszatérési értéke. Tehát csak meg kell nézned, hogy mondat.IndexOf(szo) értéke egyenlő-e -1-el, vagy sem.
Hát én c# kezdő vagyok én úgy godolkodtam, hogy van egy mondat pl: alma van a fán, keresett szó pl : van
a mondat annyi karakterén veszem ki amennyi a megadott szó hossza pl: alm=van ? tovább lma=van ? tovább ma*=van .....
* a space jelöli
Én így gondoltam , nem tartok még a tömböknél.
Az egész for ciklust + az eredmény kiírást le lehet erre cserélni
if(mondat.Split().Contains(szo)) Console.WriteLine("szerepel");
else Console.WriteLine("nem szerepel"); // nem teszteltem
Amúgy ha csak arra vagy kíváncsi hogy van e benne a szó (arra nem hogy hányszor), akkor amint egyszer megtaláltad, break-kel megszakíthatod a for ciklust (és így az "a" változó lehet int helyett bool, aminek szebb név "a" helyett a "tartalmazza" vagy "found")
Értették ők is, de nem elég hozzá egy darab if (max ha meghívsz valami függvényt).
Az ötlet viszont jó (ha új stringet nem akarsz):
for (int i = 0; i < mondat.Length - szo.Length; i++) {
_bool talalt = true;
_for (int j = 0; j < szo.Length; ++j) {
__if (mondat[i+j] != szo[j]) talalt = false;
_}
_if (talalt) { Console.WriteLine("Talált"); }
}
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!