Diskuze: Řetězec (rozdělení vět)
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 25 zpráv z 25.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tento celý kód máš vložený kde ? V metodě po kliknutí na tlačítko ?
V konstruktoru ? Nebo jsi to prsknul někam ? Pod pojmem "program stále nejde"
si můžeme představit cokoliv. Nezapne se ? Nezobrazí výsledek ? Přehází
věty špatně ? Program padá ? Bohužel opět vedení dalo všechny
věštecké nástroje vyčistit . Popiš prosím více problém a pokusíme se poradit. Jen tak pro
začátek. Proč tam máš prázdný blok else ?
Ten kód tady vypadá blbě, proč je tam tolik mezer?
1.) Rozděl podle teček, vytvoř si kolekci věty<string>
2.) věty rozdělené podle teček rozděl podle ?
3.) věty rozdělené podle teček rozděl podle !
4.) věty rozdělené podle ? rozděl podle !
Myslím si že by to mělo stačit.
ano je to po kliknutí na tlačítko. Program po kliknutí neprovede nic.
Prázdné else tam je prozatím, jelikož přesné zadání je: "Program
spočítá počet vět. Pokud jich je sudý počet vypíše věty v opačném
pořadí. Pokud bude počet lichý, vypíše nejdříve věty v lichém pořadí
(1., 3., 5. atd.) a teprve po nich věty v pořadí sudé (2., 4., 6. atd.).
např: Ahoj, Tomáši. Jak se máš. Já dobře. Ty také? -> Ty také? Já
dobře. Jak se máš. Ahoj, Tomáši."
a else má být potom na lichý počet vět.
Program neudělá nic ... co udělá ? Běží dál bez spadnutí ? Pokud ano, není metoda registrovaná na tlačítko. Nejrychlejší cesta jak to zjistit je v Designeru kliknout na tlačítko a v properties najít záložku Events (ikona blesku) , najít si řádek Click a ujistit že tam je ta metoda napsaná, pokud ne, 2x klepnout do toho řádku a metoda se vygeneruje.
Promiň, jsem v programování amatér. Mohl bys to popsat víc pro blbce?
3 je liché
možná proto to nic neudělá
Běží bez spadnutí. Ale to není tímhle... Když smažu z podmínky if ostatní podmínky tzn. že nechám jen: "if (textBox1.Text[R] == '.')" tak funguje. Ale když tam dám další podmínky s OR (||) tak nic neprovede...
No nevím na co konkrétně potřebuješ podmínky, ale za minutu jsem seplácal toto:
string dlouhyText = Console.ReadLine();
//string dlouhyText = "Ahoj, Tomáši. Jak se máš. Já dobře. Ty také?";
char[] poleRozdelovacu = { '.', '!', '?' };
string[] vety = dlouhyText.Split(poleRozdelovacu);
for (int i = vety.Length - 1; i > 0; i--)
{
Console.WriteLine(vety[i]);
}
Console.ReadKey();
Podívej se na zdejší tutoriály o práci se stringy, nalezneš velmi užitečnou metodu Split. Jinak, neousivís to přímo s programem, zápis kódu je šílený. Proměnné (privátní) by měly být vždy malým písmenem. Vždy !
upřesním, aby to ngo.andrej pochopil správně - první
písmeno má být malé Poté můžeš využít pro "oddělení" slov dva způsoby zápisu,
ten co tu používáš - velbloudí, to znamená že budeš mít:
int mojeKrasnaPromnenna
nebo použiješ podtržítkový zápis:
int moje_krasna_promnenna
To už je na tobě
No jo, ale zase to napíše zase takhle př. Ahoj, Tomáši. Jak se máš.
Já dobře. Ty také? -> Ahoj, Tomáši. Jak se máš. Já dobře. ?ékat yT
.eřbod áJ .šám es kaJ .išámoT ,johA
a to já nechci.
Prosímtě o co ti teda jde, chceš
a)
vstup = "Babička Karkulky ráda skotačí s vlky";
výstup = "vlky s skotačí ráda Karkulky Babička";
nebo b)
vstup = "Babička Karkulky ráda skotačí s vlky";
výstup = "yklv s íčatoks adár yklukraK akčibaB";
?
Tak v tom případě je misazovo řešení správné, až na to že tam nepřidává zpátky ty otazníky, tečky a vykříčníky. A chybí tam poslední slovo, místo i > 0 bude i >= 0;
Omlouvám se, dobrý už to funguje. Ale problém ještě v tom aby mi to otisklo stejnou interpunkci. Nevíte někdo, jak to aplikovat?
co třeba zkontrolavat, jestli se v dane casti vety vyskytuje carka a tu pak
presunout na konec
Nejlepší to bude projít cyklem, ukládat si postupně všechny čárky,
tečky a tyhle blbosti třeba do zásobníku který by pro to byl úplně
ideální, nebo do listu, a při výpisu je dávat mezi ty jednodlivý položky
No já to stejně nechápu, jak bych to poté vyvolal přesně na to stejné místo, kam to patří? To mi vrtá hlavou..
Použiješ zásobník .
Zásobník tak , že oc jde první tam, dje poslední ven. Tj nejdříve
projedeš cyklem větu, naházíš do zásobníku charů znaky, poté použiješ
Misazuv příklad -> rozplituješ na pole větu, projedeš opět cyklem a za
každou část (resp. každý index) vyndáš prvek ze zásobníku a hotovo
Sice to nedělám moc rád, ale posílám funkční řešení. Pokus se
pochopit jak to funguje A ty
další záležitosti zvládneš
Stack<char> znaky = new Stack<char>();
string veta = "Ahoj jak se jmenuješ ? Jmenuji se Tomáš ! Já také.";
char[] set = new char[3] { '.', '!', '?' };
foreach (char p in veta)
{
if (p == '.' || p == '!' || p == '?')
znaky.Push(p);
}
string[] pole = veta.Split(set,StringSplitOptions.RemoveEmptyEntries);
string output = "";
for (int i = pole.Length-1; i >= 0; i--)
{
if (znaky.Count > 0)
output += pole[i] + znaky.Pop();
else output += pole[i];
}
Console.WriteLine(output);
Nechci rejpat, ale hezčí v tom vypisovacím foru místo
if(znaky.Count > 0)
output += pole[i] + znaky.Pop();
else output += pole[i];
bude toto:
output += pole[i];
if (znaky.Count > 0) output += znaky.Pop();
Jenom aby ten kód byl 130% dokonalý
Zobrazeno 25 zpráv z 25.