从char数组中获取最后一个整数值

时间:2011-02-27 07:08:05

标签: c

考虑像这样的char数组:

43 234 32 32

我想要整数形式的最后一个32值。

字符串大小/长度未知。在上面的示例中,有4个数字,但大小会有所不同。

如何做到这一点?

5 个答案:

答案 0 :(得分:3)

  

我已将这些值从文件复制到char数组。现在我想要整数变量中的最后一个数字

复制时,添加复制的#字符计数器。然后这样做

int count = 0;
char c;
while(c = readCharFromFile()) {
  array[count++] = c;
}

int last = array[count - 1];

答案 1 :(得分:2)

有很多方法可以解决这个问题。

  1. 将每个标记(空格分隔的字符串)转换为数字,当标记用完时返回最后转换的值。

  2. 扫描行代码,直至结束,然后将最后一个代币转换为数字。

  3. 从行尾开始。跳过空格并存储数字,直到遇到第一个空格,然后将结果转换为数字。

  4. 将字符串拆分为字符串数组,并将最后一个字符串转换为数字。

  5. 我可以继续,但你明白了我的想法。

答案 2 :(得分:1)

int getLastInt(char *data)
{
    size_t i = strlen(data);
    if(!i--) return -1; // failure
    for(;i;--i)
    {
        if(data[i] == ' ')
        {
            return atoi(&data[i+1]);
        }
    }
    return -1; // failure
}

只要数据有空格+实际文本,就应该有效。 您也可以跳过strlen并向前循环,这可能会更快,具体取决于系统的strlen。

答案 3 :(得分:0)

如果该行上没有尾随空格:

int last_int(const char *s)
{
    const char *ptr = strrchr(s, ' ');
    if (ptr == NULL) {
        ptr = s;
    } else {
        ptr++;
    }

    return atoi(ptr);
}

如果可能有尾随空格,那么你需要做一些像ProdigySim建议的那样,但是有更多状态,向后走过尾随空格(如果有的话),然后超过数字,然后调用atoi() 。无论你做什么,你都需要注意边界条件和边缘情况,并决定你想如何处理它们。

答案 4 :(得分:0)

我想你想要使用strtok_r和atoi的组合