• 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.

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
150 wizyt
pytanie zadane 15 stycznia 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 przez adrian17 Ekspert (334,700 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 przez mokrowski Mędrzec (155,480 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 przez adrian17 Ekspert (334,700 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 przez Bollo Początkujący (460 p.)
        zaszyfrowanytekst[i] = alfabet->c_str()[i + przesuniecie];

komentarz 15 stycznia przez adrian17 Ekspert (334,700 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 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ź 609 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
0 głosów
1 odpowiedź 2,833 wizyt
pytanie zadane 24 sierpnia 2018 w C i C++ przez Sanchezklub Początkujący (400 p.)
0 głosów
0 odpowiedzi 465 wizyt
pytanie zadane 11 lipca 2018 w C i C++ przez niezalogowany

91,849 zapytań

140,524 odpowiedzi

317,035 komentarzy

61,171 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...