Jump to content

View more

Image of the Day

Boxes as reward for our ranking mode. ヾ(☆▽☆)
#indiedev #gamedev #gameart #screenshotsaturday https://t.co/ALF1InmM7K
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

better way to extract number from string?

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
3 replies to this topic

#1 Kevn   Members   

166
Like
1Likes
Like

Posted 23 January 2012 - 02:06 PM

Hey, I was wondering if there is a better/more efficient way of going about extracting any number that follows 'i' in a file. So lets say the document has the following content : "Hello, this is a random document... try to extract i1 i34 i405 i2 from this document". So by the end of the extraction you would have the numbers 1, 34, 405, and 2.

The way I am currently doing it is:
string filename, line;
int test = 0;
ifstream infile(filename);
if (!infile){
	cout << "Could not open file" << endl;
	return 1;
}
while (getline(infile, line))
{
	for (string::iterator it = line.begin(); it < line.end(); it++)
	{
		 if (*it == 'i'){
			  it++;
			  test = 0;
			  while (*it > 47 && *it < 58){
					test = test * 10;
					test = test + (*it - '0');
					it++;
				}
				cout << test << " ";
				it--;
			}
	  }
}
infile.close();


#2 fastcall22   Moderators   

10681
Like
1Likes
Like

Posted 23 January 2012 - 02:20 PM

ifstream fs( "test.txt" );
if ( !fs )
    return;

fs.seekg( 0, ios::end );
int sz = fs.tellg();
fs.seekg( 0, ios::beg );

char* file = new char[sz];
in.read( file, sz );

vector<int> data;
char* current = file;
char* previous = file;
char* end = file + sz;
int i;
while ( current < end ) {
    previous = current;
    i = strtol( current, &current, 10 );
    if ( previous == current )
        current ++;
    else
        data.push_back( i );
}

delete[] file;
</int>

EDIT:
Oops, didn't see that the integers needed to be prefixed with 'i'.
zlib: eJzVVLsSAiEQ6/1qCwoK i7PxA/2S2zMOZljYB1TO ZG7OhUtiduH9egZQCJH9 KcJyo4Wq9t0/RXkKmjx+ cgU4FIMWHhKCU+o/Nx2R LEPgQWLtnfcErbiEl0u4 0UrMghhZewgYcptoEF42 YMj+Z1kg+bVvqxhyo17h nUf+h4b2W4bR4XO01TJ7 qFNzA7jjbxyL71Avh6Tv odnFk4hnxxAf4w6496Kd OgH7/RxC

#3 SiCrane   Moderators   

11760
Like
5Likes
Like

Posted 23 January 2012 - 02:22 PM

*
POPULAR


  while (infile) {

    std::istream::int_type c = infile.get();

    if (c == 'i') {

      std::istream::int_type next = infile.peek();

      if (isdigit(next)) {

        int i;

        infile >> i;

        std::cout << i << std::endl;

      }

    }

  }



#4 Kevn   Members   

166
Like
0Likes
Like

Posted 23 January 2012 - 03:40 PM

Awesome, thank you!




Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.