1

我从文本文件中读取了一行,其中行尾有数字(格式:“some text.001”),我想获取 0 或 0 之后的数字。因此,如果是 001,则为 1,如果是 010,则为 10。我现在得到的:

fgets(strLine, 100, m_FileStream);
// Here I need to cut the numbers into myNum
int num = atoi(&myNum);

我尝试使用 strrchr 来获取“。”的位置,但不知道接下来会发生什么。也许我需要strtok,但我不知道如何使用它。

4

4 回答 4

4

一旦你有了你的位置,.你可以前进一个char并使用atoi()

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char buf[20] = "some text.010";
    char* period_ptr = strrchr(buf, '.');
    if (period_ptr)
    {
        printf("%d\n", atoi(++period_ptr));
    }
    return 0;
}
于 2012-04-19T14:08:53.723 回答
0

这是一个 C 解决方案,而不是 C++,但应该可以工作:

const char *filename = "some text.001";
char *p = strrchr(filename, '.');
if (p != NULL)
{
    int num = atoi(p+1);
    printf("%d\n", num);
}
else
{
    // No extension
}
于 2012-04-19T14:10:07.110 回答
0

我认为这应该有效:

fgets(..);
int iPos = strLine.find_last_of('0');
string strNum = strLine.substr(iPos, strLine.length()-iPos);
int num = ...

http://www.cplusplus.com/reference/string/string/find_last_of/

虽然没有测试过。

于 2012-04-19T14:11:11.877 回答
0

该函数strtol()(或变体)是您进行数字转换的朋友 - 更喜欢它,atoi()因为您可以更好地控制转换和错误检测。对于 C++ 方法,您可以使用 STL:

string s = "some text.001";
size_t p = s.find_last_of('.');
cout << (( p != string::npos ) ? strtol( s.substr(p+1).c_str(), NULL, 0 ) : -1) << endl;

输出:

1

于 2012-04-19T14:28:55.183 回答