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

C++, Szyfr cezara. Konwersacja string na char.

VPS Starter Arubacloud
0 głosów
246 wizyt
pytanie zadane 15 stycznia 2023 w C i C++ przez Kuba_Brzoza Nowicjusz (120 p.)
#include <iostream>

#include <string>



using namespace std;



int main()

{

    string tekst, zaszyfrowanytekst;

    int dlugosc, przesuniecie;

    string alfabet[]={"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"};

    cout << "Wpisz tekst do zaszyfrowania ";

    getline(cin, tekst);

    dlugosc = tekst.length();

    cout << "Wpisales " << tekst;

    cout << "\nPiata litera wpisanego slowa to " << tekst[4];

    cout << "\nDlugosc twojego tekstu wynosi " << dlugosc;

    cout << "\nPodaj przesuniecie ";

    cin >> przesuniecie;

    zaszyfrowanytekst=tekst;

    for (int i=0; i<dlugosc; i++){

        tekst[i]= toupper(tekst[i]);

        zaszyfrowanytekst[i] = alfabet[i+przesuniecie];

}

    cout << "Zaszyfrowany tekst " << zaszyfrowanytekst;

    return 0;

}


W 43 linii dostaje taki oto błąd error: cannot convert 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to '__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type' {aka 'char'} in assignment| Czy ktoś wie w jaki sposób go rozwiązać? Szukam po różnych forach i niestety nie mogę znaleźć odpowiedzi.
 

2 odpowiedzi

0 głosów
odpowiedź 15 stycznia 2023 przez adrian17 Ekspert (348,920 p.)

Chyba coś potężnie pomieszałeś.

Po pierwsze, to:

={"A" "B" "C" "D" "E" "F" "G" ... }

jest równoważne

={"ABCDEFG..."}

Bo zgubiłeś przecinki.

Po drugie, co do samego zamysłu kodu, to przekombinowałeś z tą tablicą stringów. Każde z tych by miało miało sens:

string alfabet = "ABCDEFG...";
const char *alfabet = "ABCDEFG...";
char alfabet[] = "ABCDEFG...";
char alfabet[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', ...};

Ale nie tablica stringów którą napisałeś.

komentarz 15 stycznia 2023 przez mokrowski Mędrzec (156,260 p.)
Khm.. nie do końca równoważne. W przypadku c-stringa, na końcu w tablicy jest '\0' a w przypadku "literkowania" tego znaku nie ma.
komentarz 15 stycznia 2023 przez adrian17 Ekspert (348,920 p.)

Ale nigdzie nie napisałem że moje 4 przykłady są równoważne. Napisałem tylko że spełnią zadanie w kontekście tego programu.

Te pierwsze dwie linie równoważne.

0 głosów
odpowiedź 15 stycznia 2023 przez Bollo Początkujący (460 p.)
        zaszyfrowanytekst[i] = alfabet->c_str()[i + przesuniecie];

komentarz 15 stycznia 2023 przez adrian17 Ekspert (348,920 p.)
To technicznie jest całkowicie poprawne, ale nie zmienia faktu że sama tablica stringów jest przekombinowana i to -> w ogóle by nie było potrzebne.

Również to .c_str() w ogóle nie jest potrzebne i można je po prostu wyrzucić.
komentarz 16 stycznia 2023 przez Kuba_Brzoza Nowicjusz (120 p.)
Dzięki, a wiesz może czego zaszyfrowany tekst to kompletna głupota?

Podobne pytania

0 głosów
1 odpowiedź 830 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
0 głosów
1 odpowiedź 3,212 wizyt
pytanie zadane 24 sierpnia 2018 w C i C++ przez Sanchezklub Początkujący (400 p.)
0 głosów
0 odpowiedzi 492 wizyt
pytanie zadane 11 lipca 2018 w C i C++ przez niezalogowany

92,950 zapytań

141,909 odpowiedzi

321,133 komentarzy

62,284 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!

...