Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: C++ ASCII

Aktivity
Avatar
laney10
Člen
Avatar
laney10:3.10.2014 6:18

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:3.10.2014 6:26

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
Odpovídá na laney10
Patrik Valkovič:3.10.2014 7:45

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:3.10.2014 19:58

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:3.10.2014 20:00

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.