PDA

Visualizza la versione completa : [c++]conversione da intero a stringa non funzionante


cleaner
11-01-2009, 18:48
allora, io leggo da file una stringa..che di fatto è un numero,lo converto in intero tramite la funzione atoi(argomento) e successivamente lo aumento di 1.
Ora mi serve riconvertirlo in stringa..ho provato:

int num;
string x;

x = num.str();

ma non va...come posso risolvere??? :master:

MItaly
11-01-2009, 18:51
Puoi usare la itoa, la sscanf o la classe istringstream.

cleaner
11-01-2009, 19:12
itoa non mi viene riconociuta, nonostante abbia dentro queste dichiarazioni:

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

ho quindi:

int numero; //contiene il numero
char c[40];


ho fatto..

itoa(numero,c,40);

mi restituisce --> itoa was not declared in this scope , come mai?? Mi faresti un esempio con sscanf che non l'ho capito?? L'ultima alternativa vorrei aspettare un attimo..

MItaly
11-01-2009, 19:37
La itoa non è standard, per cui il tuo compilatore potrebbe non fornirla; per la sprintf (ho scritto sscanf, ma mi ero confuso), basta semplicemente fare


sprintf(c,"%d",numero);

la snprintf è meglio perché è più sicura


snprintf(c,sizeof(c),"%d",numero);
c[sizeof(c)-1]=0;
.
D'altra parte se lavori in C++ con la classe string la cosa migliore a ben vedere è la classe ostringstream (e daje, prima ho scritto istringstream :incupito: ).

cleaner
11-01-2009, 20:26
ah non sapevo che itoa non fosse compreso, comunque utilizzo codeblocks..
per quanto riguarda snprintf(pathfile,sizeof(pathfile),"%d",numero) funziona bene , tuttavia non ho capito cosa fa questa istruzione:


c[sizeof(c)-1]=0;


dopo la conversione ripristina a 0 la dimensione di c?Perchè?

Per quanto riguarda la ostringstream, a quale funzione ti riferisci in particolare?

Stoicenko
12-01-2009, 09:50
dopo la conversione ripristina a 0 la dimensione di c?Perchè?

No, quell'istruzione mette l'ultimo carattere a "0" come da standard stringhe di caratteri..

Massachusetts
12-01-2009, 10:17
Originariamente inviato da cleaner
ah non sapevo che itoa non fosse compreso, comunque utilizzo codeblocks..
per quanto riguarda snprintf(pathfile,sizeof(pathfile),"%d",numero) funziona bene , tuttavia non ho capito cosa fa questa istruzione:


c[sizeof(c)-1]=0;


dopo la conversione ripristina a 0 la dimensione di c?Perchè?


Manuale C
#include <stdio.h>
int snprintf(char* buffer, size_t nsize, const char* fmt, ...);

Description :
Sends formatted output to a buffer of a maximum length specified by nsize.
If the number of bytes to output is:
< nsize, then all of the characters have been written, including the terminating ‘\0’ character.
== nsize, then nsize characters are written, with no terminating ‘\0’ character.
> nsize, then only nsize characters are written, with no terminating ‘\0’ character.
If nsize is 0, then the string will not be written to (and may be NULL).

Return Value

Number of bytes output, or, if nsize is 0, the number of bytes needed, not including the terminating ‘\0’ character.


Originariamente inviato da cleaner
Per quanto riguarda la ostringstream, a quale funzione ti riferisci in particolare?


stringstream stream;
int i = 123456;
// stream.width(12); // Opzionali
// stream.fill('0'); // Opzionali
stream << i;
cout << stream.str() << endl;

Loading