Mistrovství v c++ Kapitola5-7. prílad – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mistrovství v c++ Kapitola5-7. prílad – C / C++ – Fórum – Programujte.comMistrovství v c++ Kapitola5-7. prílad – C / C++ – Fórum – Programujte.com

 

Robo
~ Anonymní uživatel
82 příspěvků
26. 7. 2011   #1
-
0
-

Potreboval by som pomôcť s programom: Napíšte program, ktorý používa znakové pole a cyklus k prečítaniu celého jedného slova, pokiaľ nenarazí na slovo hotovo. Program by mal potom vypísať počet prečítaných slov. Program musí obsahovať hlavičkový súbor cstring a porovnanie by mal robiť pomocou funkcie strcmp(). Po spustení by sa mal správať takto:
Zadajte slova (program ukončite zadaním slova hotovo)
agina babicka celebrita drahota erb frantik geometrie hotovo inkoust jalovec
Celkom ste zadali 7 slov.

S touto funkciu som sa ešte vôbec nestretol a nemám šajnu ako nato. celý deň sa stým trápim. Potreboval by som aspoň poradiť alebo usmerniť, ako nato

Nahlásit jako SPAM
IP: 188.112.106.–
KIIV
~ Moderátor
+43
God of flame
26. 7. 2011   #2
-
0
-

int strcmp( const char * retezec1, const char * retezec2)

ocekava dva retezce ukoncene '\0', vraci 0 kdyz sou stejne...

takze jedine co se od tebe ocekava je spravne naplnit retezec slovem, hodit za slovo '\0', a srovnat s "hotovo"

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
28. 7. 2011   #3
-
0
-

No skúšal som to všelijako, trápil sa, hľadal na nete, ale nič. Spravil som len toto



#include <iostream>
#include <cstring>

int main ()
{
	using namespace std;
	int i;
	char r1[20];
	char r2[10] = "hotovo";
	int strcmp (const char* r1, const char* r2 = "hotovo");
	do
	{
		cin>>r1;
	}
	while(strcmp != '0', i++);		
	cout<<"Pocet slov: "<<i<<endl;
	system ("pause");
	return 0;
}
Nahlásit jako SPAM
IP: 188.112.69.–
KIIV
~ Moderátor
+43
God of flame
28. 7. 2011   #4
-
0
-

no zatim moc nechapes na co sou funkce ze?

kdyz uz:

i=0;
do {
  cin >> r1; // nebezpecne (hrozi buffer overflow)
  i++;
} while( strcmp(r1, "hotovo") != 0 );
Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
29. 7. 2011   #5
-
0
-

Funkcie budú až o 2 kapitoly. Doteraz som všetko spravil, len toto strcmp mi robí problém. 

Tak keď nie cin>>r1;  tak potom by mohlo byť cin.get(*r1); , ale to bere aj prázdne znaky.

using namespace std;
	int i = 0;
	int strcmp (const char* r1, const char* r2);
	do
	{
		cin.get(*r1);
		i++;
	}
	while( strcmp(*r1, "hotovo") != 0 );		
	cout<<"Pocet slov: "<<i<<endl;

fakt už neviem. Ja potrebujem Vidieť celý príklad a potom naňho kukám a postupne začínam chápať. A keď pochopím, tak si robím podobné. Ale tento.. Asi to zastane u mňa nevyriešené :D

Nahlásit jako SPAM
IP: 188.112.113.–
KIIV
~ Moderátor
+43
God of flame
29. 7. 2011   #6
-
+1
-
Zajímavé

funkce sou zminene uz v druhy kapitole

nebezpecny to neni kvuli  "cin >>"   ale kvuli  "char r1[20];"  --- co kdyz ti na vstupu nekdo zada asdfghjkwertzdhvestdjfjetzdrzfhgtzughujhadfahsfuhalsdfhafausdhfajksdhf ??? tech 19 znaku do kterejch se musis vejit + ukoncovaci proste nestaci a prepises kdo vi co za tim... (ted by to mohl byt napriklad ten retezec v r2 - ciste teoreticky)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
29. 7. 2011   #7
-
0
-

Mám zatiaľ toto, ale keď dám enter tak mi neukončí program, ale skočí o riadok. Môžeš mi tu opraviť čo mám zle ?

#include <iostream>
#include <cstring>
int main ()
{
	using namespace std;
	int i = 0, j = 0;
	char r1[200];
	char r2[] = "hotovo";
	int vys;
	do
	{
	for (i; r1 != '\0'; i++)// rob pokial nezadam medzeru
		cin>>r1[i];
	j++;//po zisteni medzeri pripocita slovo
	
	vys = strcmp (r1, r2);
	}
    while(vys != 0 );
	cout<<"pocet slov: "<<j<<endl;
	system("pause");
	return 0;
}
Nahlásit jako SPAM
IP: 188.112.93.–
KIIV
~ Moderátor
+43
God of flame
29. 7. 2011   #8
-
0
-

   

#include <iostream>
#include <cstring>

using namespace std;

int main () {

  int j = -1;
  char r1[200];

  do {
    cin >> r1;
    j++;  //po zisteni medzeri pripocita slovo
  } while ((strcmp(r1,"hotovo")!=0) && !cin.eof());
  cout << "pocet slov: " << j << endl; // zapocita se i hotovo (proto j = -1 na zacatku)
  system("pause");
  return 0;
}

EDIT: jeste vychytavka, kdyby to clovek chtel pouzit s presmerovanim

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
yaqwsx+9
Posthunter
29. 7. 2011   #9
-
0
-

#7 Robo
Důvod je jednoduchý; cin >> r1[i] je blost. cin >> proměnná čte ze vstupu do pole char, dokud nenarazí na bílý znak (mezera, nový řádek, tabulátor, apod.) Ty ho nutíš načítat do 1 prvku char.

Tudíž stačí vyhodit cyklus a nechat jen cin >> r1

do
{
	cin >> r1;
	j++;//po zisteni medzeri pripocita slovo
	vys = strcmp (r1, r2);//Popř ještě ti zjednoduší
		//život, kdy to napíšeš takto: vys = strcmp (r1, "hotovo")
}
while (vys != 0);

Edit: Tak jsem byl pomalejší...
Nahlásit jako SPAM
IP: 85.160.68.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Robo
~ Anonymní uživatel
82 příspěvků
29. 7. 2011   #10
-
0
-

Díky moc. Fakt je to lahké. Ja som tu tvoril nejaké komplikované čudá. Takže, keď príde na medzeru, tak program to bere automaticky ako ukončenie slova a nemusím tam ja dávať tú podmienku

Nahlásit jako SPAM
IP: 188.112.93.–
yaqwsx+9
Posthunter
29. 7. 2011   #11
-
0
-

#10 Robo
U cin nemusíš. Ale bacha na to, i ta tvá podmínka byla špatně - porovnával jsi se znakem '/0' - znak, kterým se ukončuje řetězec -  a to není to samé co mezera. Říkám ti to proto až v budoucnu budeš něco psát, tak aby ses nedivil proč to nefunguje.

Nahlásit jako SPAM
IP: 85.160.104.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Mistrovstvi V C++ — založil defer

Mistrovstvi C++ — založil Petr Pilař

Mistrovstvi C++ 8.4 — založil Onsi

Mistrovství v C++ - cvičenia — založil Enuyvatar

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý