2012-04-19 6 views
1

テキストファイルから行を読み込みます。行末に数字(format: "text.001")があります。 0または0です。C++ charから指定された部分を取得

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

私はの位置を取得するためにstrrchrてみましたが、次は何を知っていない「を。」:それは、その後、1 001だならば、それは010だのであれば、それは私が今持って何10 です。多分私はstrtokが必要ですが、私はそれをどのように使用するのか分かりません。

+2

これは、より多くの 'C++'よりもC ' 'のように見えます。一般的には、C++で 'cin'と' std :: string'を使用してください。 – RageD

答えて

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; 
} 
+0

それは仕事です、ありがとう! – matthew3r

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 
} 
0

Iこれは動作するはずだと思う:

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/

ただし、テストしていません。

+0

そしてファイル拡張子が '0'で始まらない場合は? – trojanfoe

+0

だから私はリンクを追加しました:find_last_posは、0が見つからなければnposを返します。 if(iPos!= std :: npos)のようにチェックすることができます...私は少しの自己動機/調査を期待します。 :-( – AudioDroid

0

関数strtol()(またはその変形)は、数値変換のお友達です。変換とエラー検出をより詳細に制御できるので、atoi()にすることをお勧めします。出力

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; 

:C++のアプローチについて、あなたはSTLを使用することができ