|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
C++ una questione di stringhe
Problema
siano date due stringhe così formate: N.B: i (.......) stanno a rappresentare che nella parte sinistra vi sono altri caratteri e vanno filtrati .................A-332.359$ .................A52.589$ la fine di tali stringhe è segnalata dal caratere ( $ ) Da queste stringhe si desidera: a) prelevarne la parte numerica (-332.359) facendo la scansione delle stringhe tenendo presente che tale parte numerica rappresenta un angolo nella notazione "sessadecimale" b) convertirla nel tipo di dato più appropriato c) calcolare dalla suddetta parte numerica il suo "angolo complementare?" (non ricordo se si chiamava così) e cioè: alfa_gradi = 360 +/- (......) tenendo in cosiderazione che dopo il punto decimale si desidera considerare solo 3 cifre e) riconvertire nuovamente il tutto in formato stringa chicca finale Usando la minor quantità di codice possibile |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2000
Città: San Pellegrino Terme (BG)
Messaggi: 58
|
Mah, io ci provo...
float gradi; char *s[28] = ".................A-332.359$"; s[strlen(s)-1] = '\0'; gradi = atof(&s[18]); // ...e hai in gradi l'angolo da lavorare
__________________
Per me l'uomo colto non è colui che sa quando è nato Napoleone, ma quello che sa dove andare a cercare l'informazione nell'unico momento della sua vita in cui gli serve, e in due minuti. Umberto Eco |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: C++ una questione di stringhe
domanda base. Che stringhe stai utilizzando ? char* o std::string ?
Nel secondo risulta molto piu' semplice. |
![]() |
![]() |
![]() |
#4 | |||||
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: C++ una questione di stringhe
ad esempio, modo molto pigro:
(n.b.: suppongo che 'A' sia il carattere che identifica l'inizio dei gradi ) Codice:
#include <string> #include <sstream> using namespace std; ... string foo( const string& s ) { string::size_type i = s.find_last_of('A'); string num1 = s1.substr( i, s.end() -1 ); float f; { istringstream in(num1); in >> f; } // Intendi dire l'angolo complementare ( 90.0 - x ) oppure l'opposto ? - x ). f = -f; // Il dato va salvato nella vecchia stringa ? Suppongo di sì // Per prima cosa salviamo la parte alfanumerica string result = string( s[0], s[ i+1 ] ); // Aggiungiamo il numero ostringstream r(result); // Impostiamo un numero fisso (3) di decimali r.precision( 3 ) r << f; // E infine il carattere di terminazione r << '$'; return r.str() } domande varie... Quote:
Quote:
Quote:
![]() Quote:
Quote:
![]() Disclaimer: codice non testato. Sicuramente ci sono errori e qualche indice sara' sbagliato ( i+1 ? i-1 ? ![]() Serve soltanto per dare l'idea del funzionamento. ... infatti ho subito trovato un errore (corretto) ![]() ... secondo errore corretto ... ![]() |
|||||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
io sono riuscito a scrivere tutto su di una riga ma, il codice è illeggibile
![]() mi è sparita una discussione però ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:08.