Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozbicie stringa na poszczególne litery i ich zamina na cyfry.

Ostatnio zmodyfikowano 2013-12-07 20:16
Autor Wiadomość
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
C/C++
#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 :)
P-98589
Monika90
» 2013-12-07 17:07:26
C/C++
#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 << ' ';
   
}
P-98591
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 kompiluje
C:\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)
P-98592
Monika90
» 2013-12-07 17:13:43
Włącz w kompilatorze zgodność ze standardem ISO, flaga: -std=c++11
P-98594
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
P-98597
kubawal
» 2013-12-07 17:28:44
Project->Build options->Compiler settings->Other options i dopisujesz jak napisał @up
P-98600
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ć ?
P-98624
Monika90
» 2013-12-07 20:00:32
Można inaczej
C/C++
#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.
P-98626
« 1 » 2
  Strona 1 z 2 Następna strona