c++ converting string to int

前端 未结 4 613
我在风中等你
我在风中等你 2021-01-28 06:55
//sLine is the string
for(int l = 0; l < sLine.length(); l++)
{
    string sNumber;
    if(sLine[l] == \'-\')
    {   
        sNumber.push_back(sLine[l]);
        sN         


        
相关标签:
4条回答
  • 2021-01-28 07:20

    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.

    0 讨论(0)
  • 2021-01-28 07:26

    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).

    0 讨论(0)
  • 2021-01-28 07:29

    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;
    }
    
    0 讨论(0)
  • 2021-01-28 07:36

    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;
    }
    
    0 讨论(0)
提交回复
热议问题