Kezdőoldal » Számítástechnika » Programozás » Van egy program de elakadtam,...

2105as kérdése:

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#)

Figyelt kérdés

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();


2016. nov. 17. 20:50
 1/7 |Orfeusz| ***** válasza:

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

}

}

2016. nov. 17. 21:03
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

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.

2016. nov. 17. 21:05
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:

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.

2016. nov. 17. 21:17
 4/7 A kérdező kommentje:
Köszönöm a választokat.
2016. nov. 17. 21:36
 5/7 anonim ***** válasza:

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

[link]

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")

2016. nov. 17. 22:28
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
Mi ez a szar?
2016. nov. 17. 23:39
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

É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"); }

}

2016. nov. 18. 12:22
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!