考虑像这样的char数组:
43 234 32 32
我想要整数形式的最后一个32
值。
字符串大小/长度未知。在上面的示例中,有4个数字,但大小会有所不同。
如何做到这一点?
答案 0 :(得分:3)
我已将这些值从文件复制到char数组。现在我想要整数变量中的最后一个数字
复制时,添加复制的#字符计数器。然后这样做
int count = 0;
char c;
while(c = readCharFromFile()) {
array[count++] = c;
}
int last = array[count - 1];
答案 1 :(得分:2)
有很多方法可以解决这个问题。
将每个标记(空格分隔的字符串)转换为数字,当标记用完时返回最后转换的值。
扫描行代码,直至结束,然后将最后一个代币转换为数字。
从行尾开始。跳过空格并存储数字,直到遇到第一个空格,然后将结果转换为数字。
将字符串拆分为字符串数组,并将最后一个字符串转换为数字。
我可以继续,但你明白了我的想法。
答案 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的组合