2016-05-20 6 views
-1

Как я должен идти о загрузке переменной из строки ?: , например, это мой текстовый файл:переменной нагрузки из строки

INT: 10
INT: 25
INT: 30

Как я могу загрузить их в массив? это код, я использую для загрузки строки:

string loadedB[100]; 
ifstream loadfile; 
loadfile.open("ints.txt"); 

if(!loadfile.is_open()){ 
    MessageBoxA(0, "Could not open file!","Could not open file!", MB_OK); 
    return; 
} 

string line; int i = -1; 
while(getline(loadfile, line)){ i++; 
    loadedB[i] = line; 
} 
loadfile.close(); 

for(int x = 0; x < count(loadedB); x++){ 
    cout << loadedB[x] << endl; 
} 

Я хотел бы сделать что-то вроде:

int intarray[100]; 
loadfromstringarray(loadedB, intarray); 

Этого кода будет взять часть строки (числовые один) и поставлю это значение в массиве, например intarray[0] = 10; и т. д.

EDIT: istringstream - это решение!

+2

Вы хотите ['std :: istringstream'] (http://en.cppreference.com/w/cpp/io/basic_istringstream). –

+1

Но тогда вопрос в том, как он преобразует данные строкового потока в отдельные ints? std :: stoi() может работать с вашим существующим подходом - http://www.cplusplus.com/reference/string/stoi/ – Serge

+0

@ πάνταῥεῖ спасибо, вот что я искал! –

ответ

0

лично мне нравится старые добрые функции sscanf C:

int intarray[100]; 
int i = 0; 
while(getline(loadfile, line) && i < sizeof(intarray)/sizeof(*intarray)) 
{ 
    sscanf(line.c_str(), "int: %d", intarray + i++); 
} 
0

Использование stoi:

vector<int> ints; 
ifstream loadfile("ints.txt"); 

string line; 
while(getline(loadfile, line)) { 
    ints.push_back(stoi(line.substr(5))); // skip the first 5 chars of each line 
} 

for(int i : ints) { 
    cout << i << endl; 
} 

Выход:

10 
25 
30 
1

лично мне нравится старый добрый std::istringstream объект:

const std::string example = "int: 10"; 
std::string prompt; 
int value; 
std::istringstream parse_stream(example); 
std::getline(parse_stream, prompt, ':'); 
parse_stream >> value; 
Смежные вопросы