• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfr Cezara C++ Pomocy

VPS Starter Arubacloud
0 głosów
3,218 wizyt
pytanie zadane 24 sierpnia 2018 w C i C++ przez Sanchezklub Początkujący (400 p.)

Jestem poczatkujacym "programistą". Chciałem zrobić program który pozwoli mi rozszyfrować wiadomość z C++. Jako że nie chciałem od nikogo spisywać spróbowałem zrobić sam. moim załozeniem jest aby popodaniu slowa wybralo one 1 litere i ta litera przeszla przez switche przeszła do nowej postaci. Program po podaniu litery ( chcialem sprobowqac tylko z litera a ) myśli po 15 minutach nie dal rezultatu :(

#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;

string slowo;
int przesu;
int alfabet[29] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};


int main()
{
    cout<< "podaj slowo"<< endl;
    cin >> slowo;
    cout << "Podaj przesuniecie" << endl;
    cin >> przesu;
    for( int i=0; i = slowo.length(); i++)
    {
    switch(slowo[i])
    {
    case 'a':
    cout << alfabet[1+przesu] << endl;
    break;
       }
    }
    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 24 sierpnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 24 sierpnia 2018 przez Sanchezklub
 
Najlepsza

W pętli for masz taki warunek:

i = slowo.length()

Czy nie miało być tam przypadkiem czegoś takiego?

i < slowo.length()

Pętla ma się wykonywać dopóki i jest mniejsze niż długość słowa. smiley

Program zatrzymuje Ci się dlatego, że nie wyczyściłeś strumienia wejściowego (więcej informacji na ten temat znajdziesz tutaj: http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12). Po wczytaniu stringa "slowo", a przed wczytaniem inta "przesu" daj taki kod:

cin.clear();
cin.ignore(1000, '\n');

Możesz też bardziej profesjonalnie skorzystać z nagłówka <limits> (z tego co widzę jest to w podanym przeze mnie linku opisane), ale jeśli się dopiero uczysz to nie musisz sobie zaprzątać głowy czymś takim jeszcze.

Kolejna sprawa - tablica z alfabetem powinna być typu char, wtedy std::cout wypisze Ci odpowiednie litery jako znaki (a, b, c), a nie jako odpowiadające tym znakom liczby (97, 98, 99).

Inna sprawa to taka, że rozmiar tablicy ustawiłeś na 29, a liter w alfabecie łacińskim jest 26. Jeszcze inna sprawa to taka, że ta tablica w ogóle nie jest Ci do niczego potrzebna. wink Switch i obsługa każdej literki z osobna też nie jest dobrym rozwiązaniem, bo wymaga duplikowania kodu do przesunięcia kilkadziesiąt razy! Lepszym rozwiązaniem byłoby skorzystanie z operacji modulo - pomyśl sam, jak można by jej tutaj użyć.

komentarz 24 sierpnia 2018 przez Sanchezklub Początkujący (400 p.)
dziekuje bardzo zaczyna dzialać. Wcześniej mialem litery oznaczone jako char ale coś musaiłem głupio poprawić :)

Podobne pytania

0 głosów
1 odpowiedź 840 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
0 głosów
0 odpowiedzi 493 wizyt
pytanie zadane 11 lipca 2018 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 359 wizyt

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...