【问题标题】:atoi conversion to return a single digit valueatoi 转换以返回单个数字值
【发布时间】:2011-11-14 19:38:31
【问题描述】:

我有一个这样的字符数组:

+---+---+---+ |53.|.7.|...| |6..|195|...| |.98|...|.6.| +---+---+---+

我正在使用 int 数组在特定索引处存储特定值。 对于转换,我使用了

            for(int i=0;i<27;i++)
        {
        inputNumArray[i]=atoi(&inputInitial[indexArray[i]]);        
        }

现在问题是我想要的输出是:

5 3 0 0 7 0 0 0 0 6 0 0 1 9 5 0 0 0 0 9 8 0 0 0 0 6 0

代码返回给我这个:

53 3 0 0 7 0 0 0 0 6 0 0 195 95 5 0 0 0 0 98 8 0 0 0 0 6 0

我认为原因是 atoi 扫描直到找到字符,对于 atoi(&inputInitial[i]) 它将读取直到 i+1、i+2... 等等直到它遇到错误。 我想将 atoi 扫描限制为仅单个字符。有可能还是我应该使用其他功能?

【问题讨论】:

    标签: c++ atoi


    【解决方案1】:

    不要用atoi,就用这个:

    if(isdigit(c))
        val = c - '0';
    else
        val = 0
    

    【讨论】:

    • 我会提议 (isdigit(c))?(c-'0'):0 但这个没问题 ^^
    • 我少了一个分号而你没有,所以你的更好...我没有使用 ?: 因为 typedef1 显然是 C 新手,我认为更具可读性更好这个案例。至少这是我的正式借口,不过这可能是我长期使用 Python 的原因。
    • val = isdigit(c) ? c-'0':0;我相信。
    • 宏在 C++ 中是邪恶的,它们比三元运算符差得多。但我必须承认,typedef1 的解决方案看起来更加荒谬。只需按照 zmbq 最初的方式编写即可。如果我记得的话,我稍后会 +1 解决方案,我当天没有票了:p
    • @typedef1,这并不荒谬,但对眼睛很不利。您希望您的程序易于阅读。这通常比在函数调用上节省几个周期重要得多。
    【解决方案2】:

    你对atoi 的猜测是正确的。如果要转换单个数字,可以创建一个仅包含该数字的字符串:

    char temp[2] = { inputInitial[indexArray[i]], '\0' );
    inputNumArray[i] = atoi( temp );
    

    【讨论】:

      【解决方案3】:

      您可以暂时将字符串中下一个字符的值更改为 0,因此 a to i 只读取一个数字。

      【讨论】:

        【解决方案4】:

        atoi 需要一个以空字符结尾的字符序列。

        最好编写自己的带有单个字符的函数,例如:

        int ctoi ( char ch ) {
            if ( ch >= '0' && ch <= '9' ) return ch - '0';
            return -1; // error
            }
        

        【讨论】:

          【解决方案5】:

          输入格式我不清楚。但是,这是我对数组所做的:

          char x[] = "12345678";
          int out[] = new out[strlen(x)];
          
          int* oit = out;
          for (char* it=x; it < x+sizeof(x);)
               *oit++ = (*it++)-'0'
          
          
          // out[] now contains char-by-char value as int
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多