Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2011, 18: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 16:50.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 22: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, 23:36   #3
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8238
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 23:42.
Perseverance è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2011, 23: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, 23:48   #5
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8238
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, 11: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 11:30.
skeleton è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2011, 13: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, 14: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, 15: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, 16: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, 16: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, 16: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, 18:06   #13
Perseverance
Senior Member
 
L'Avatar di Perseverance
 
Iscritto dal: Jul 2008
Messaggi: 8238
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: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
DDR5 troppo cara: il passato di AMD potr...
5 sconti TOP nuovi di zecca e altre offe...
Il più venduto e apprezzato: ECOV...
Era e resta un super top di gamma: il TV...
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: 18:33.


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