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

 

Toto vlákno bylo označeno za vyřešené.
thifferx0
Newbie
11. 11. 2016   #1
-
0
-

Zdravím za úkol mám porovnat 3 řetězce. Program jsem dokázal udělat, ale stále si nevím rady, jak ošetřit vstupy (potřebuju to ošetřit tak, aby když uživatel zadá pouze 2 slova, tak mu to vypíše hlášku Neplatný vstup).

Můj kód:

#include <iostream>

#include <string>

using namespace std;

int main()

{

    cout << "Zadejte 3 slova:" << endl;

    string slovo1,slovo2,slovo3;

    cin >> slovo1;

    cin >> slovo2;

    cin >> slovo3;

if (cin.fail()) {cout << "Nespravny vstup." << endl;}

else

{

for (unsigned int i=0;i<slovo1.length();i++)

    {slovo1[i]=toupper(slovo1[i]);}

for (unsigned int j=0;j<slovo2.length();j++)

    {slovo2[j]=toupper(slovo2[j]);}

for (unsigned int z=0;z<slovo3.length();z++)

    {slovo3[z]=toupper(slovo3[z]);}

            if (slovo1==slovo2)

                {cout << "Slovo1 a slovo2 jsou stejna." << endl;}

            else

                {cout << "Slovo1 a slovo2 nejsou stejna." << endl;}

            if (slovo1==slovo3)

                {cout << "Slovo1 a slovo3 jsou stejna." << endl;}

            else

                {cout << "Slovo1 a slovo3 nejsou stejna." << endl;}

            if (slovo2==slovo3)

                {cout << "Slovo2 a slovo3 jsou stejna." << endl;}

            else

                {cout << "Slovo2 a slovo3 nejsou stejna." << endl;}

}

    cout << "Pocet znaku ve slovo1 je: " << slovo1.length() << endl;

    cout << "Pocet znaku ve slovo2 je: " << slovo2.length() << endl;

    cout << "Pocet znaku ve slovo3 je: " << slovo3.length() << endl;

    return 0;

}

  Přes cin.fail mi to nešlo, taktéž jsem zkoušel, pokud by se délka stringu rovnala 0 (nebo menší než 0). Bohužel nic z toho nešlo. Mohli by jste mi trochu poradit co s tím? Předem děkuji
 

Nahlásit jako SPAM
IP: 85.135.103.–
gna
~ Anonymní uživatel
1206 příspěvků
11. 11. 2016   #2
-
0
-

Ono by to tak mělo fungovat, ale ty asi chceš všechna slova na jednom řádku. Takže nejdříve načti řádek a až ten rozděl na slova. Třeba takhle:

#include <sstream>
...
string line;
getline(cin, line);

stringstream ss(line);

ss >> slovo1;
...

A ještě 2 tipy:

  • to načítání jde zřetězit
  • fail můžeš testovat operátorem !

takže třeba takto:

...
if (!(ss >> slovo1 >> slovo2 >> slovo3))
{
	cout << "Nespravny vstup." << endl;
}
...
Nahlásit jako SPAM
IP: 213.211.51.–
thifferx
~ Anonymní uživatel
15 příspěvků
11. 11. 2016   #3
-
0
-

#2 gna
Díky moc za rady, všechno už funguje jak má. Chyba byla na mé straně, protože v zadání nebylo zmíněno, že ty slova měla být všechna na jednom řádku, ale teď mi to dává i smysl (podle zobrazení vstupu). Díky moc i za ty typy - určitě se budou hodit.

Nahlásit jako SPAM
IP: 85.135.103.–
thifferx0
Newbie
11. 11. 2016   #4
-
0
-

#2 gna
Nakonec mi to ještě nefunguje - aplikoval jsem to takhle 

string slovo1,slovo2,slovo3,line;
    getline(cin,line);
    stringstream ss(line);

ss >> slovo1 >> slovo2 >> slovo3;

if (!(ss >> slovo1 >> slovo2 >> slovo3))
{
    cout << "Nespravny vstup." << endl;
}

Problém je, že teď to nesprávný vstup vypise u všech možností i těch správných. Určitě jsem to naimplementoval špatně.

ahoj moje prikladzevsechnejtezsi

(tady mam jeste ten nespravny vstup - co tam nema byt)

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
 

Mi to udělá to stejné, akorát tam je i ten nesprávný vstup. btw u toho když ten uživatel zadá pouze 2 slova, tak to musí být ve výsledku takhle:

hello world

Nespravny vstup.
 

Nahlásit jako SPAM
IP: 85.135.103.–
gna
~ Anonymní uživatel
1206 příspěvků
11. 11. 2016   #5
-
0
-

Máš tam to načítání dvakrát (ss >> ...). Při prvním se to načte a druhé hodí chybu.

Nahlásit jako SPAM
IP: 213.211.51.–
thifferx0
Newbie
11. 11. 2016   #6
-
0
-

#5 gna
Díky moc - všechno už funguje správně.

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

Podobná vlákna

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

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 © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý