//sLine is the string
for(int l = 0; l < sLine.length(); l++)
{
string sNumber;
if(sLine[l] == \'-\')
{
sNumber.push_back(sLine[l]);
sN
You output extra 0
for the characters which are not digits. The problem is that atoi returns 0 when it cannot convert the input, so your whitespaces are printed as zeroes.
Move this:
const char* testing = sNumber.c_str();
int num = atoi(testing);
cout << num;
Below the last }
in the code you pasted, i.e. out of the for-loop. Currently you get a separate printout for every character in sLine
because it's executed on every iteration of the loop. (The last character in sLine
may be a linefeed so this can occur even if you think you wrote only one digit.)
Edit: Also move the declaration of sNumber
above the for-loop.
You may also want to change if (sLine[l] == '-')
to if (sLine[l] == '-' && (l + 1) < sLine.length())
so you don't access beyond the end of the string if the dash is the final character on the line.
You may also want to rename the variable l
to something that looks less like a 1
. =)
You may also want to rethink if this is the right way to do this at all (usually if a simple thing gets this complicated, chances are you're doing it wrong).
That seems like a painful way to recreate the wheel. You'd be better off using a stringstream to parse this.
std::stringstream strm(sLine);
int num;
while(strm >> num)
{
std::cout << num << std::endl;
}
It's displaying a zero for all nonrecognized characters, because atoi
returns 0
when given a non-numeric string (like a space!)
However, what you want to do, is shockingly simple:
std::stringstream ss(sLine);
int num;
while(ss >> num) {
cout << num;
}