Porovnání řetězců – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Porovnání řetězců – C / C++ – Fórum – Programujte.comPorovnání řetězců – C / C++ – Fórum – Programujte.com

 

Gaba
~ Anonymní uživatel
3 příspěvky
25. 11. 2012   #1
-
0
-

Ahoj, mám programování jako okrajový předmět, který musím vydržet jeden semestr, tak bych prosila o pomoc s jedním úkolem... Něco jsem vypotila, ale nefungovalo mi to :( Takže bych potřebovala příspěvky, které fungovat budou. Vím, že jsem nemožná, ptát se na fóru, ale co, tady chodí ti, kteří tomu rozumí :-)

Znění úkolu:Realizujte program, který pro tři slova vypíše počet znaků, které obsahují, a porovná každé s každým. Vypíše, zda se slova rovnají či nikoliv.

Vstupem programu jsou tři řetězce slovo1, slovo2 a slovo3.

Výstupem programu jsou následující informace v pořadí dle ukázek:

informace, zda se shoduje slovo1 a slovo2
informace, zda se shoduje slovo1 a slovo3
informace, zda se shoduje slovo2 a slovo3
počet znaků ve slovo1
počet znaků ve slovo2
počet znaků ve slovo3

Program detekuje chybu, pokud na vstupu nejsou zadaná požadovaná tři slova. V takovém případě vypíše chybové hlášení dle ukázky a ukončí se. Chybové hlášení vypisujte na standardní výstup (nevypisujte jej na standardní chybový výstup).

Nahlásit jako SPAM
IP: 188.175.160.–
Gaba
~ Anonymní uživatel
3 příspěvky
25. 11. 2012   #2
-
0
-

Ukázka práce programu:

Zadejte 3 slova:
ahoj moje prikladzevsechnejtezsi
Slovo1 a slovo2 nejsou stejna.
Slovo1 a slovo3 nejsou stejna.
Slovo2 a slovo3 nejsou stejna.
Pocet znaku ve slovo1 je: 4
Pocet znaku ve slovo2 je: 4
Pocet znaku ve slovo3 je: 22

Zadejte 3 slova:
cviceni java programovani
Slovo1 a slovo2 nejsou stejna.
Slovo1 a slovo3 nejsou stejna.
Slovo2 a slovo3 nejsou stejna.
Pocet znaku ve slovo1 je: 7
Pocet znaku ve slovo2 je: 4
Pocet znaku ve slovo3 je: 12

Zadejte 3 slova:
hello world
Nespravny vstup.

Zadejte 3 slova:
jednodenni ale ale
Slovo1 a slovo2 nejsou stejna.
Slovo1 a slovo3 nejsou stejna.
Slovo2 a slovo3 jsou stejna.
Pocet znaku ve slovo1 je: 10
Pocet znaku ve slovo2 je: 3
Pocet znaku ve slovo3 je: 3

Zadejte 3 slova:
dva akvarium dva
Slovo1 a slovo2 nejsou stejna.
Slovo1 a slovo3 jsou stejna.
Slovo2 a slovo3 nejsou stejna.
Pocet znaku ve slovo1 je: 3
Pocet znaku ve slovo2 je: 8
Pocet znaku ve slovo3 je: 3

Zadejte 3 slova:
malo malo malo
Slovo1 a slovo2 jsou stejna.
Slovo1 a slovo3 jsou stejna.
Slovo2 a slovo3 jsou stejna.
Pocet znaku ve slovo1 je: 4
Pocet znaku ve slovo2 je: 4
Pocet znaku ve slovo3 je: 4

Zadejte 3 slova:
dvatisicedvestedvacetdva dvatisicedvestedvacetdvaapul trista
Slovo1 a slovo2 nejsou stejna.
Slovo1 a slovo3 nejsou stejna.
Slovo2 a slovo3 nejsou stejna.
Pocet znaku ve slovo1 je: 24
Pocet znaku ve slovo2 je: 28
Pocet znaku ve slovo3 je: 6

Zadejte 3 slova:
NEMAMRAD nemamrad NEmamRAD
Slovo1 a slovo2 jsou stejna.
Slovo1 a slovo3 jsou stejna.
Slovo2 a slovo3 jsou stejna.
Pocet znaku ve slovo1 je: 8
Pocet znaku ve slovo2 je: 8
Pocet znaku ve slovo3 je: 8

Nahlásit jako SPAM
IP: 188.175.160.–
TheOndrap+2
Super člen
25. 11. 2012   #3
-
0
-

Ahoj,

C nebo C++ ?? případně podle ukázky č.2 Java?

Nahlásit jako SPAM
IP: 88.102.250.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Gaba
~ Anonymní uživatel
3 příspěvky
25. 11. 2012   #4
-
0
-

C++ jsem zapomněla dodat :-) Chci to jen odklepnout, nic vím a ostatní s tím nějak neotravovat :D ( V rámci možností :D)

Nahlásit jako SPAM
IP: 188.175.160.–
Doomista+1
Stálý člen
25. 11. 2012   #5
-
0
-

pokud c++, použij pro řetězec string, daj se porovnávat nádherně pomocí if, délka se zjistí: 

string str="bla";
cout << "Retezec ma " << str.length() << " znaku.";

v čistým je na char fce strlen a napsal bych f-ci, snad postačující

bool porovnej(char *str1, char str2){
int len1=strlen(str1), len2=strlen(str2); //ziskam delky retezcu
	if(len1!=len2)//nejsou stejne dlouhe retezce
	return false;
	else{ //jsou, porovnejme je
		for(int a=0; a<len1; a++)
			if(str1[a]!=str2[a])
			return false;
	return true;
	}
}

//pouziti
#include <string>
...
char ret1[40];
char ret2[40];
...
cin >> ret1; //zapis
...
//porovnani
	if(porovnej(ret1,ret2))
	printf("Retezce jsou stejne");

snad to mám správně ;)

Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
Doomista+1
Stálý člen
25. 11. 2012   #6
-
0
-

už vidím první chybu 

bool porovnej(char *str1,char *str2){
Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
vitamin+8
Grafoman
25. 11. 2012   #7
-
+1
-
Zajímavé

#6 Doomista
Na porovnavanie cstringov existuje funkcia strcmp()

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
cibule0
Návštěvník
25. 11. 2012   #8
-
0
-

#2 Gaba
Tak tady je ukaza v C++ nerikam ze je to nejlepsi reseni :-)

#include <iostream>

using namespace std; #include <iostream>

using namespace std;

bool IgnoreCaseCompare(const string& str1, const string& str2) {
    if (str1.size() != str2.size()) {
        return false;
    }
    for (string::const_iterator c1 = str1.begin(), c2 = str2.begin(); c1 != str1.end(); ++c1, ++c2) {
        if (tolower(*c1) != tolower(*c2)) {
            return false;
        }
    }
    return true;
}

int main()
{
    string slova[3] = {"","",""};
    char r = '\0';
    int i = 0;

    cout << "Zadej slova\n";
    while(1)
    {
    r = cin.get();
    if(r == ' ')
    {
        while(r == ' ') r = cin.get();
        i++;
    }
    if( r == '\n' || r == -1 || i > 2) break;
    slova[i].push_back(r);
    }



    if(i != 2) cout << "Spatny pocet slov" << endl;
    else
    {
       cout << "Slovo1 a Slovo2 " << ((IgnoreCaseCompare(slova[0],slova[1])) ? "jsou": "nejsou") << " stejna" << endl;
       cout << "Slovo1 a Slovo3 " << ((IgnoreCaseCompare(slova[0],slova[2])) ? "jsou": "nejsou") << " stejna" << endl;
       cout << "Slovo2 a Slovo3 " << ((IgnoreCaseCompare(slova[1],slova[2])) ? "jsou": "nejsou") << " stejna" << endl;

       cout << "Pocet znaku ve slove1 je " << slova[0].size()<<endl;
       cout << "Pocet znaku ve slove2 je " << slova[1].size()<<endl;
       cout << "Pocet znaku ve slove3 je " << slova[2].size()<<endl;
    }


    return 0;
}

EDIT: nevsim sem si ze to ma byt ignore Case

Nahlásit jako SPAM
IP: 85.70.207.–
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, 14 hostů

Podobná vlákna

Porovnání řetězců — založil thifferx

Porovnání řetezců — založil pazdy

Porovnani retezcu? — založil TuTi_fruTi

Porovnání řetězců — založil Bananovnik

Porovnání dvou řetězců — založil jouda

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ý