2012-04-19 2 views
1

Я прочитал строку из текстового файла, где в конце строки есть числа (формат: «some text.001»), и я хотел бы получить номер после 0 или 0s. Так что, если это 001, то 1, если это 010, то это 10. , что я получил в настоящее время:C++ Получить определенную часть из char

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

Я попытался с strrchr, чтобы получить позицию, но не знаю, что будет дальше «» , Может быть, мне нужен strtok, но я не знаю, как его использовать.

+2

Это выглядит как '' C', чем C++ '. В общем, используйте 'cin' и' std :: string' в C++ – RageD

ответ

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; 
} 
+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 возвращает npos, если 0 не найден. Затем вы можете проверить, нравится ли (iPos! = Std :: npos) ... Я бы ожидал крошечного немного самомотивации/расследования. :-( – AudioDroid

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; 

Выход:

Смежные вопросы