Program: z string: zero na int: 0

0

Witam,
mam takie zadanie: napisz program konwertujący słownie zapisane liczby na cyfrowe odpowiedniki, np zero na 0, a dwa na 2.

Sytuacja była by prosta gdyby nie słówko konwerując nie wiem jak wykorzystać konwersję aby zrobić tę zadanie, bez konwersji napisał bym tak, ale domyślam się że ta zamiana ze string na int jest sednem, celem, tego zadania dlatego proszę was o pomoc bo na google te zamiany są tak napisane że nie moge nic zrozumieć:

#include "std_lib_facilities.h"
#include "Polskie_znaki.h"
int main ()
{
string liczba;
string a = "zero";
string b = "jeden";
string c = "dwa";
string d = "trzy";
string e = "cztery";
cout << PL("Wpisz słownie liczbę z zakresu 0 - 4:\n");
cin>>liczba;
if (liczba == a){
cout << PL("Twoja liczba to, ") << "0" << "\n";
keep_window_open();
return 0;
}
if (liczba == b){
cout << PL("Twoja liczba to, ") << "1" << "\n";
keep_window_open();
return 0;
}
if (liczba == c){
cout << PL("Twoja liczba to, ") << "2" << "\n";
keep_window_open();
return 0;
}
if (liczba == d){
cout << PL("Twoja liczba to, ") << "3" << "\n";
keep_window_open();
return 0;
}
if (liczba == e){
cout << PL("Twoja liczba to, ") << "4" << "\n";
keep_window_open();
return 0;
}
cout << PL("Błędna liczba\n");
keep_window_open();
return 0;
}

2
  1. przeinterpretowujesz treść. nie czepiaj się tego słówka.
  2. pomyśl nad użyciem tablicy:
string liczby[] = { "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec", "dziesiec"};
0

Konwertując w tym kontekście oznacza raczej to samo co zamieniając.
Istotny jest jeszcze zakres tych liczb (a może to mają być cyfry tylko).

To ma być od 0-9, czy np. może być "dwadzieścia jeden tysięcy sto pięćdziesiąt dwa"?
W pierwszym przypadku taka tablica jak zaproponował MarekR22 wystarczy. Po prostu przelecieć ją pętlą - cyfra to będzie indeks pasującego stringu. W drugim przypadku to takie proste nie jest, ale do napisania.

0

Przepisze dokładnie zadanie;

Napisz program konwerujący słownie liczby na cyfrowe odpowiedniki, np. zero na 0, a dwa na 2. Gdy użytkownik wpisze liczbę, program powinien wyświetlać odpowiednią cyfrę. Zapewnij obsługę liczb 0, 1, 3 i 4 oraz spraw, żeby program wyświetlał komunikat typu Nie znam takiej liczby, jeśli użytkownik wpisze coś nieodpowiedniego, np. Głupi komputer !.

jest to zadanie do jednego z działów książki którą czytam, zadanie raczej nie ma ukrytego wymagającego rozbudowanego kodu gdyż jest to poczatek ksiązki uczącej od podstaw to jest prawie wszystko co zostało napisane o konwersji w tym dziale a co za tym idzie informacje na podstawie ktorych mam napisać powyższy program;
char c = 'x';
int i1 = c;
int i2 = 'x';
W kodzie tym zarówno zmianna i1, jak i i2 będą miały wartość 120, która jest całkowito liczbowym odpowiednikiem litery 'x' w zestawie znaków ASCII
bezpieczne kowertowanie; bool na char int double, char na int i double,
oraz int na double np.
double d1 = 2.3;
double d2 = d1+2; // 2 zostanie przed dodaniem przekonwertowane na 2.0
if (d < 0) // 0 zostanie przed porównaniem przekonwertowane na 0.0
error("d1 ma ujemną wartość")

0

Może być coś takiego? :)

 #include "std_lib_facilities.h"

int main () {
 cout << "Podaj prosze slownie (malymi literami) lub cyfra liczbe z zakresu <0;4>:\n";
 string l;
 string a = "zero";
 string b = "jeden";
 string c = "dwa";
 string d = "trzy";
 string e = "cztery";
 string f = "0";
 string g = "1";
 string h = "2";
 string i = "3";
 string j = "4";
 cin >> l;

 cout << "Twoja liczba to: ";
 if (l == a || l == f) {
    cout << "0";
 } else if (l == b || l == g){
    cout << "1";
 } else if (l == c || l == h){
    cout << "2";
 } else if (l == d || l == i){
    cout << "3";
 } else if (l == e || l == j){
    cout << "4";
 } else cout << "Bledna liczba";

}
1

Zdecydowanie - nie. Przerób to na zakres 0:100 wtedy zrozumiesz czemu nie.

1

na google te zamiany są tak napisane że nie moge nic zrozumieć

Może przykład po polsku będzie Ci łatwo zrozumieć?

program("Polski slownik cyferek od 0 do 4") to
	staly slownik<napisow i liczb> slownik_liczb zawiera
		pare("zero" i 0),
		pare("jeden" i 1),
		pare("dwa" i 2),
		pare("trzy" i 3),
		pare("cztery" i 4)
	wystarczy;
	
	napis wejscie_uzytkownika;
	
	wypisz << "Podaj slownie liczbe <0;4>: ";
	pobierz >> wejscie_uzytkownika;
	
	jezeli slownik_liczb posiada(wejscie_uzytkownika) to
		wypisz << "Twoja liczba to " 
		       << wartosc_slownika(slownik_liczb, wejscie_uzytkownika);
	inaczej
		wypisz << "Nie znam takiej liczby";
	wystarczy;
wystarczy

No oczywiście do skompilowania musisz dorzucić te regułki

#include <iostream>
#include <string>
#include <map>
using namespace std;

#define program(x) int main(
#define staly const
#define i , 
#define zawiera = {
#define wystarczy }
#define pare(x) { x }
#define jezeli if(
#define to ){
#define inaczej } else {
#define posiada(x) .count(x)

#define wartosc_slownika(slownik, klucz) slownik.at(klucz)

namespace /* odmiana */{
	using napis = string;
	using napisow = napis;
}

namespace /* odmiana */{
	using liczba = int;
	using liczb = liczba;
}

auto &pobierz = cin;
auto &wypisz = cout;

template<typename Klucz, typename Wartosc>
using slownik = map<Klucz, Wartosc>;

http://ideone.com/KWS7lW

1 użytkowników online, w tym zalogowanych: 0, gości: 1