Computer Science Canada

C++ String Handling

Author:  jrcdude [ Mon Feb 21, 2011 12:30 am ]
Post subject:  C++ String Handling

For this post I will be referring to the CCC 2010 Junior Problem 4 question.

For my implementation of receiving the data to process, I had to use some very hacky techniques. I would like to know what the proper way to do this would be.

Example:

string input = "7 3 4 6 4 5 7 5";
int out[10];

I did the follow:

(int)input.at(0) - 48 //results in number of integers following

loop through the string
if((int)input.at(x) != 32)
out[x] = (int)input.at(x) - 48

if(input.at(x+1) != 32)
out[x] *= 10
out[x] += (int)input.at(x + 1) - 48

So as you can see it gets messy with the (int) conversion, etc.

I know in Java it would be much better to simply use a tokenizer with a space as a delimiter, but how would one do something such as this easily in C++, or is there a better technique for input such as this.

Thanks,
Jason

Author:  Tony [ Mon Feb 21, 2011 12:46 am ]
Post subject:  RE:C++ String Handling

Isn't the iostream library the first thing that is taught for C++ (it being necessary for Hello World)?

Quote:

McAwesome:/tmp $ cat test.cpp
#include <iostream>

int main(){
int num_inputs, num;

std::cin >> num_inputs;
for(int i=0; i < num_inputs; i++){
std::cin >> num;
std::cout << "lol: " << num << std::endl;
}
return 0;
}
McAwesome:/tmp $ g++ test.cpp
McAwesome:/tmp $ echo "7 3 4 6 4 5 7 5" | ./a.out
lol: 3
lol: 4
lol: 6
lol: 4
lol: 5
lol: 7
lol: 5

Author:  jrcdude [ Mon Feb 21, 2011 12:57 am ]
Post subject:  RE:C++ String Handling

My god.. Must have missed that lesson that each space counts as a new input. Thanks a lot!


: