View Full Version : [C++] Dato un testo risalire ai codici ASCII di ogni carattere
skeleton
05-03-2011, 17:52
Salve a tutti,
avrei un problema che non riesco a risolvere. Preso un input da tastiera (un solo carattere), vorrei che questi venisse "analizzato" restituendomi il corrispettivo codice ASCII.
Ad esempio inserendo 'A' il programma deve restituirmi 65.
Questa è la parte del programma che ho scritto, ma che presenta un errore nella funzione "CodiceAsciiCarattere":
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int CodiceAsciiCarattere(string car){
int ascii;
char carattere[1000];
strcpy(carattere, car.c_str() );
ascii = (int)carattere;
return ascii;
}
main(){
string a;
cout<<"INSERIRE CARATTERE: ";
getline(cin,a);
cout<<"RISULTATO CONVERSIONE IN CARATTERI ASCII: "<<CodiceAsciiCarattere(a);
cout<<"\a\nFINE PROGRAMMA";
getch();
}
Riuscireste a trovare l'errore, per favore.
PS: preferirei usare la classe string per gestire il testo.
Grazie mille.
pabloski
05-03-2011, 21:35
Il problema è qui
strcpy(carattere, car.c_str() );
ascii = (int)carattere;
con la prima riga estrai un vettore zero terminated c-like dalla String e siamo d'accordo
ma nella seconda prendi l'entry point del vettore carattere e lo metti in una variabile int....quindi la conversione in ascii dov'è?
quello che devi fare è ciclare con un for su tutta la stringa e fare la conversione carattere per carattere, ad esempio
for (i=0; i<strlen(carattere); i++) ascii[i] = int(carattere[i]);
Perseverance
05-03-2011, 22:36
Hemm, ma siete PPPPAAZZI?!? :D
#include <iostream>
using namespace std;
int main()
{
char a;
cin >> a;
cout << (int)a;
system("pause");
return 0;
}
Se proprio la vuoi vedere come funzione:
#include <iostream>
using namespace std;
int converti(char a)
{
return (int)a;
}
int main()
{
char a;
cin >> a;
cout << converti(a);
system("pause");
return 0;
}
ascii = (int)carattere;
Carattere è un vettore, mica lo puoi assegnare tutto ad una variabile
Supdario
05-03-2011, 22:37
Il tuo più che altro è un errore concettuale, visto che stai usando una stringa per prendere un singolo carattere.
Quello che devi fare è questo:
char c;
cin >> c;
cout << (int)c;
EDIT: Sono stato preceduto di un minuto. :asd:
Perseverance
05-03-2011, 22:48
int CodiceAsciiCarattere(string car){
int ascii;
char carattere[1000];
strcpy(carattere, car.c_str() );
ascii = (int)carattere;
return ascii;
}
Qui sopra il compilatore s'incazza di brutto. La puoi modificare così per ottenere la sequenza decimale di ascii:
#include <blablabla>
int ascii[1000]; //Variabile vettoriale globale
void CodiceAsciiCarattere(string car){
char carattere[1000];
strcpy(carattere, car.c_str() );
for(int i=0; i<1000; i++)
ascii[i] = (int)carattere[i];
}
skeleton
06-03-2011, 10:17
Scusate la mia ignoranza in tema di array, ma a scuola abbiamo appena cominciato e devo fare ancora un po'di pratica. Mi sorge spontanea una domanda, se io devo convertire solo una lettera alfabetica per esecuzione di programma, posso impostare la funzione in questo modo? perchè si o perchè no?
int CodiceAsciiCarattere(string car){
int ascii[0];
char carattere[1];
strcpy(carattere, car.c_str() );
ascii[0] = (int)carattere[1];
return ascii[0];
}
Tantissime grazie per le vostre mille risposte.
Supdario
06-03-2011, 12:28
Così facendo crei un vettore "ascii" con 0 elementi (???). Non mi pare che la cosa abbia molto senso, tanto vale che crei una variabile normale.
Se vuoi estrarre il codice ASCII del primo carattere in una stringa basta fare così:
int CodiceAsciiCarattere(string car)
{
return (int)carattere[0];
}
Non c'è bisogno di creare una stringa e di copiare il contenuto lì dentro.
skeleton
06-03-2011, 13:15
Così facendo crei un vettore "ascii" con 0 elementi (???). Non mi pare che la cosa abbia molto senso, tanto vale che crei una variabile normale.
Se vuoi estrarre il codice ASCII del primo carattere in una stringa basta fare così:
int CodiceAsciiCarattere(string car)
{
return (int)carattere[0];
}
Non c'è bisogno di creare una stringa e di copiare il contenuto lì dentro.
Graize per il suggerimento, ma provando ho notato che il codice postato da te non funziona, perchè a qualsiasi numero binario inserito il riusultato è sempre 49.
pabloski
06-03-2011, 14:22
a questo punto è obbligatorio chiedere: "ma l'input qual'è?"
perchè qui c'è chi come me ha capito che l'input è una stringa, chi invece ha capito che l'input è un singolo carattere
a seconda della situazione la routine cambia profondamente
se devi convertire una sequenza di caratteri in una sequenza di valori interi che rappresentano il codice ascii dei caratteri allora la soluzione è quella che ho detto io
skeleton
06-03-2011, 15:49
a questo punto è obbligatorio chiedere: "ma l'input qual'è?"
perchè qui c'è chi come me ha capito che l'input è una stringa, chi invece ha capito che l'input è un singolo carattere
a seconda della situazione la routine cambia profondamente
se devi convertire una sequenza di caratteri in una sequenza di valori interi che rappresentano il codice ascii dei caratteri allora la soluzione è quella che ho detto io
L'input è una stringa di un solo carattere.
Don[ITA]
06-03-2011, 15:54
Perchè usi string per rappresentare un solo carattere? :what:
skeleton
06-03-2011, 15:56
Mi scuso con tutti, ma per un mio errore ho affermato che il codice postato da Supdario era errato. Il programma, rivisto, invece sembra dare esiti positivi alle mie domande.
Ecco ciò che ne è risultato:
int CodiceAsciiCarattere(string car){
return (int)car[0];
}
main(){
string a;
cout<<"INSERIRE CARATTERE: ";
getline(cin,a);
cout<<"RISULTATO CONVERSIONE IN CARATTERI ASCII: "<<CodiceAsciiCarattere(a);
cout<<"\a\nFINE PROGRAMMA";
getch();
}
Mi scuso ancora con tutti e soprattutto con Supdario.
Grazie e a presto.:D
Perseverance
06-03-2011, 17:06
Sinceramente se tu fossi un programmatore non vorrei mai usare i tuoi programmi. :sofico:
Il mio prof a robe così, anche se funzionanti stioccava un bel 3.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.