Avatar
laney10
Člen
Avatar
laney10:

Zdravím, mohl by jste mi prosím někdo napsat co mám špatně?

#include<iostream>

using namespace std;

int main()
{
    char vstup[80];
    char vystup[80];


    cin >> vstup;

    if (cin.good())
    {
        for (int i = 0; i < 80; i++)
        {
            if (vstup[i] == '\0')
            {
                break;
            }
            else if (vstup[i] >= 'A' && vstup[i] <= 'Z')
            {
                vystup[i] = vstup[i] + 32 ,'\0';
            }
            else if (vstup[i] >= 'a' && vstup[i] <= 'z')
            {
                vystup[i] = vstup[i] - 32 ,'\0';
            }
            else if (vstup[i] >= '0' && vstup[i] <= '9')
            {
                vystup[i] = vstup[i] + 49 ,'\0';
            }

        }
        cout << vystup << endl;
    }
    else //
    {
        cout << "Nespravny vstup" << endl;
    }

    return 0;
}
 
Odpovědět 3.10.2014 6:18
Avatar
laney10
Člen
Avatar
laney10:

Na výstupu mi to píše :

123456789
bcdefghiją┤uH↑┐uŘ■(

Process returned 0 (0x0) execution time : 5.251 s
Press any key to continue.

 
Nahoru Odpovědět 3.10.2014 6:26
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na laney10
patrik.valkovic:

Příčina je jednoduchá. Všechny znaky jsou uloženy jako int, to určitě víš. Podmínku else if (vstup[i] >= 'a' && vstup[i] <= 'z') můžeš přepsat například jako else if (vstup[i] >= 97 && vstup[i] <= 122).
Potom to ovšem předáváš do druhého pole a změníš ty hodnoty. vstup[i]+49 vrátí špatné hodnoty protože už vstup[i] obsahuje hodnotu 49, a ty k tomu ještě přičteš 49, a to se teprve uloží do onoho druhého pole.
například pro 3: ASCII má hodnotu 51, když k tomu přičteš 49 máš hodnotu 100, no a to je v ASCII d.
Snad jsem pomohl

Nahoru Odpovědět 3.10.2014 7:45
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
laney10
Člen
Avatar
laney10:

Tak jsem to úplně ořezal a funguje to.

 
Nahoru Odpovědět 3.10.2014 19:58
Avatar
laney10
Člen
Avatar
Odpovídá na laney10
laney10:

Výsledek je toto :

#include<iostream>
using namespace std;
int main()
{
    char vstup[80];
    string vystup("");
    cin.getline(vstup, 80);
    cin >> vstup;
        for (int i = 0; vstup[i] != '\0'; i++)
            {
            if (vstup[i] >= 'A' && vstup[i] <= 'Z')
            {
                vystup += vstup[i] + ('a' - 'A');
            }
            else if (vstup[i] >= 'a' && vstup[i] <= 'z')
            {
                vystup += vstup[i] - ('a' - 'A');
            }
            else if (vstup[i] >= '0' && vstup[i] <= '9')
            {
                vystup += vstup[i] + 49;
            }
        }
        cout << vystup << endl;
    return 0;
}
 
Nahoru Odpovědět 3.10.2014 20:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.