Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2011, 17:52   #1
skeleton
Member
 
L'Avatar di skeleton
 
Iscritto dal: Jul 2009
Messaggi: 81
[C++] Dato un testo risalire ai codici ASCII di ogni carattere

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":
Codice:
#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.

Ultima modifica di skeleton : 06-03-2011 alle 15:50.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 21:35   #2
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Il problema è qui

Codice:
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

Codice:
for (i=0; i<strlen(carattere); i++) ascii[i] = int(carattere[i]);
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 22:36   #3
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8344
Hemm, ma siete PPPPAAZZI?!?

Codice:
#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:
Codice:
#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
__________________
System Failure

Ultima modifica di Perseverance : 05-03-2011 alle 22:42.
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 22:37   #4
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Il tuo più che altro è un errore concettuale, visto che stai usando una stringa per prendere un singolo carattere.
Quello che devi fare è questo:

Codice:
char c;
cin >> c;
cout << (int)c;
EDIT: Sono stato preceduto di un minuto.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 22:48   #5
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8344
Codice:
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:

Codice:
#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];
}
__________________
System Failure
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 10:17   #6
skeleton
Member
 
L'Avatar di skeleton
 
Iscritto dal: Jul 2009
Messaggi: 81
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?

Codice:
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.

Ultima modifica di skeleton : 06-03-2011 alle 10:30.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 12:28   #7
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
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ì:

Codice:
int CodiceAsciiCarattere(string car)
{
    return (int)carattere[0];
}
Non c'è bisogno di creare una stringa e di copiare il contenuto lì dentro.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 13:15   #8
skeleton
Member
 
L'Avatar di skeleton
 
Iscritto dal: Jul 2009
Messaggi: 81
Quote:
Originariamente inviato da Supdario Guarda i messaggi
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ì:

Codice:
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.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 14:22   #9
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
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
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 15:49   #10
skeleton
Member
 
L'Avatar di skeleton
 
Iscritto dal: Jul 2009
Messaggi: 81
Quote:
Originariamente inviato da pabloski Guarda i messaggi
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.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 15:54   #11
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Perchè usi string per rappresentare un solo carattere?
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 15:56   #12
skeleton
Member
 
L'Avatar di skeleton
 
Iscritto dal: Jul 2009
Messaggi: 81
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:
Codice:
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.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 17:06   #13
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8344
Sinceramente se tu fossi un programmatore non vorrei mai usare i tuoi programmi.

Il mio prof a robe così, anche se funzionanti stioccava un bel 3.
__________________
System Failure
Perseverance è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Noctua non testa i prodotti, 'li tortura...
ASUSTOR aggiorna il sistema operativo: a...
TIM eSIM Travel può essere utile ...
App di Spotify piantata sullo smartphone...
Batterie di accumulo grandi come condizi...
Non è il solito SSD esterno: ecco...
3 novità ufficiali su WhatsApp: come mig...
Blink Mini e Pan-Tilt tornano disponibil...
Pericoli su ruote 24 ore su 24: la causa...
Narwal Flow 2 arriva in versione bianca ...
Il rientro in ufficio peggiora la produt...
Google rilascia Android 17 QPR2 Beta 2 p...
Gli utenti Xbox potranno trasformare i g...
Bazzite migliora il supporto alle GPU NV...
Microsoft lo ha ammesso: ecco perché eli...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v