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

の位置を取得したら.、1 つ進めて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

関数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 に答える
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 に答える