Zdziwiony Temat założony przez niniejszego użytkownika |
Rozbicie stringa na poszczególne litery i ich zamina na cyfry. » 2013-12-07 16:43:51 Witam. Jako, że chciałbym sobie zrobić taki mini szyfrator plików tekstowych, mam do Was pytanie: Jak rozbić stringa wczytanego od użytkownika na litery i później zmienić ich wartość ? Program miałby działać w ten sposób: Użytkownik wpisuje komendę "deszyfruj" lub "szyfruj" W przypadku szyfracji: Wpisuje tekst np. Ala ma kota A program wyświetla na to: 1,2,1 3,1 4,5,6,1 gdzie: a=1 l=2 m=3 k=4 o=5 t=6 W przypadku wpisania "1,2,1 3,1 4,5,6,1" program oczywiście wyświetli: "Ala ma kota" gdzie: 1=a 2=l 3=m 4=k 5=o 6=t No właśnie tylko jak to zapisać... :P Póki co stanąłem na czymś takim #include <iostream> using namespace std; int main() { string tekst; getline( cin, tekst ); cout << tekst; }
Na tym wena się skończyła :P Są jakieś pomysły ? Proszę o pomoc i pozdrawiam :) |
|
Monika90 |
» 2013-12-07 17:07:26 #include <string> #include <map> #include <cctype> #include <iostream>
int main() { std::string str; std::getline( std::cin, str ); std::map < char, int > map; int i = 0; for( auto ch: str ) { ch = std::toupper( ch ); if( ch != ' ' && !map[ ch ] ) map[ ch ] = ++i; } for( auto ch: str ) if( ch != ' ' ) std::cout << map[ std::toupper( ch ) ] << ','; else std::cout << ' '; }
|
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-07 17:10:07 Dzięki za koda, ale czy mógłbym prosić o słowo wytłumaczenia? (najlepiej w komentarzach) :) PS:Ehh program się nie komp ilujeC:\Users\Łukasz\Desktop\szyfrator.cpp: In function 'int main()': C:\Users\Łukasz\Desktop\szyfrator.cpp:13:15: error: 'ch' does not name a type C:\Users\Łukasz\Desktop\szyfrator.cpp:21:5: error: expected ';' before 'for' C:\Users\Łukasz\Desktop\szyfrator.cpp:21:5: error: expected primary-expression before 'for' C:\Users\Łukasz\Desktop\szyfrator.cpp:21:5: error: expected ';' before 'for' C:\Users\Łukasz\Desktop\szyfrator.cpp:21:5: error: expected primary-expression before 'for' C:\Users\Łukasz\Desktop\szyfrator.cpp:21:5: error: expected ')' before 'for' C:\Users\Łukasz\Desktop\szyfrator.cpp:21:15: error: 'ch' does not name a type C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected ';' before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected primary-expression before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected ';' before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected primary-expression before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected ')' before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected primary-expression before 'else' C:\Users\Łukasz\Desktop\szyfrator.cpp:24:5: error: expected ';' before 'else' Process terminated with status 1 (0 minutes, 0 seconds) 14 errors, 0 warnings (0 minutes, 0 seconds) |
|
Monika90 |
» 2013-12-07 17:13:43 Włącz w kompilatorze zgodność ze standardem ISO, flaga: -std=c++11
|
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-07 17:23:29 Nie za bardzo wiem gdzie to jest ;/ Używam Code::Blocks |
|
kubawal |
» 2013-12-07 17:28:44 Project->Build options->Compiler settings->Other options i dopisujesz jak napisał @up |
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2013-12-07 19:54:48 Zrobiłem tak i oto efekt mingw32-g++.exe: error: std=c++11: No such file or directory Process terminated with status 1 (0 minutes, 0 seconds) 1 errors, 0 warnings (0 minutes, 0 seconds)
a jeśli wpisze z myślnikiem "-std=c++11" to sypie tak samo jak wcześniej ;/ Nie można tego programu jakoś inaczej zapisać ? |
|
Monika90 |
» 2013-12-07 20:00:32 Można inaczej #include <string> #include <map> #include <cctype> #include <iostream>
int main() { std::string str; std::getline( std::cin, str ); std::map < char, int > map; int i = 0; for( std::size_t j = 0; j < str.size(); ++j ) { const char ch = std::toupper( str[ j ] ); if( ch != ' ' && !map[ ch ] ) map[ ch ] = ++i; } for( std::size_t j = 0; j < str.size(); ++j ) if( str[ j ] != ' ' ) std::cout << map[ std::toupper( str[ j ] ) ] << ','; else std::cout << ' '; }
Poza tym, zamiast std::map można użyć tablicy - będzie 100 razy szybciej. |
|
« 1 » 2 |