nt
nt
no problem!
#include <stdio.h>
void main()
{
int lala = 0;
char mystring[255];
sprintf(mystring,"79");
sscanf(mystring,"%i",&lala);
printf("%i",lala); // This will print 79
}
SPH
Oh, I was looking for a function to convert it. I am using cout and cin, etc.
What I am trying to do is input a number, apply commas to it every 3 digits, and store that as a string and output it to the screen.
Then take that string, remove the commas (I have an algorithm for that already), and then convert it to an integer so I can do operations to the number.
Write a class with a streampos, if u want one I made u can use it:
// NOTE There may be a few bugs... made thsi in a hurry
Code:#include <windows.h>
#include <fstream.h>
#include <stdio.h>
#define SEEK_BEG 10
#define SEEK_POS 5
class string
{private:
char *str;
int cstreampos;
public:
bool checkwhite(char t);
void clear();
void seek(int to,int op);
int tell();
string operator<<(char *add);
string operator<<(float addf);
string operator<<(string unused);
string operator>>(char *get);
string operator>>(float &getf);
string operator>>(string unused);
void getLine(char *out,unsigned int size,char end);
char *GetDat();
};
bool string::checkwhite(char t)
{
switch(t)
{
case ' ': return true;
case '\r': return true;
case '\n': return true;
case '\t': return true;
case '\0': return true;
default: return false;
}
}
void string::clear()
{
ZeroMemory((void*)this,sizeof(string));
str = new char[1];
sprintf(str,"");
}
void string::seek(int to,int op)
{
if( (op == SEEK_POS) || (op == NULL) )
{
cstreampos = to;
}
else if( op == SEEK_END )
{
cstreampos = strlen(str);
}
else if( op == SEEK_BEG )
{
cstreampos = 0;
}
}
int string::tell()
{
return cstreampos;
}
string string::operator <<(char *add)
{
char *bin = str;
str = new char[strlen(add)+strlen(bin)];
for( unsigned int sloop = 0 ; sloop<strlen(bin) ; sloop++ )
{
str[sloop] = bin[sloop];
}
for( sloop = strlen(bin) ; sloop<strlen(add)+strlen(bin) ; sloop++ )
{
str[sloop] = add[sloop-strlen(bin)];
cstreampos++;
}
str[strlen(add)+strlen(bin)] = '\0';
delete[] bin;
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator <<(float addf)
{
MessageBox(NULL,"A float","af",MB_OK);
char *bin = str;
str = new char[sizeof(float)+strlen(bin)];
char *add = (char*)&addf;
for( unsigned int sloop = 0 ; sloop<strlen(bin) ; sloop++ )
{
str[sloop] = bin[sloop];
}
for( sloop = strlen(bin) ; sloop<sizeof(float)+strlen(bin) ; sloop++ )
{
str[sloop] = add[sloop-strlen(bin)];
cstreampos++;
}
str[sizeof(float)+strlen(bin)] = '\0';
delete[] bin;
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator >>(char *get)
{
sprintf(get,"");
for( unsigned int sloop = cstreampos ; checkwhite(str[sloop]) ; sloop++ );
for( ; !checkwhite(str[sloop]) ; sloop++ )get[sloop-cstreampos] = str[sloop];
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
string string::operator >>(float &getf)
{
ZeroMemory((void*)&getf,sizeof(float));
char *get = (char*)&getf;
for( unsigned int sloop = cstreampos ; checkwhite(str[sloop]) ; sloop++ );
for( ; (sloop-cstreampos)<sizeof(float) ; sloop++ )get[sloop-cstreampos] = str[sloop];
string unused;
ZeroMemory((void*)&unused,sizeof(string));
return unused;
}
void string::getLine(char *out,unsigned int size,char end)
{
sprintf(out,"");
for( unsigned int sloop = cstreampos ; ((sloop-cstreampos)<size) && (str[sloop] != end ) ; sloop++ )out[sloop-cstreampos] = str[sloop];
}
char *string::GetDat()
{
char *ret = new char[strlen(str)];
ZeroMemory((void*)ret,strlen(str));
sprintf(ret,str);
return ret;
}
SPH
// I also expect this will also jsut give you the idea, and u write ur own
:cool:
Whoa, thanks.
That's a bit in-depth for me, though. Aren't there functions included with borland C++ builder 5 or something?
Well... you can use strstream things, I dont suggest it, but if u must use C++ then look them up in MSDN or in Borland's Help files. Its a dirived istream, I think you should stick with sscanf and stream classes ;) . If u want I would be happy to tutor you in C++ a little.
SPH
There are a whole host of routines in the cstdlib library...
this one converts an interger to an alpha
$include <cstdlib>
char *_itoa( int value, char *string, int radix );
//value = number to be changed
//string = pointer to an alpha array
//radix = base of value
int atoi( const char *string );
will convert alpha to an interger
thx
I need to do the same thing, as in I am reading a file (ascii)
which contains only numbers... it is read in as such:
<blah blah>
inputFilePtr = fopen(argv[1], "r");
FileBuff = calloc(FileLength +1, sozeof(char));
...
fread(FileBuff, FileLength, 1, input);
The input file is like:
3 1
234 20 46.234 .0000032 233.332
2
1 40
2
2349087E-4 32409e-4 2309e-7 84384e-5 329e-6....
....
....
I have pointers to the beginning and end of this array,
and I can print it out using a switch and strtod to print
it out as the actual numbers (and it works)... the real
problem is that I need to print out (to a file) every other
number in scientific notation. (I need to print it out in
non scientific notation, but I can handle that...I think)
Anyone have any ideas? It has been years since I have done
C, and I think I am going about this the wrong way :(
Any help would be appreciated.