2015-04-14 2 views
1

В настоящее время я пытаюсь прочитать информацию из TXT-файла и по существу сохранить это правильно. Данные из входного файла будет выглядеть как этотКак разобрать часть строки, которая имеет символы, отличные от цифр, до целого числа

10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10 
765DEF 01:01:05:59 enter 17 
ABC123 01:01:06:01 enter 17 
765DEF 01:01:07:00 exit 95 
ABC123 01:01:08:03 exit 95 

Мой вопрос состоит в том, что, если предположить, я прочитал «01: 01: 05: 59» в строку, как я анализирую это хранить номера в int variable. Кроме того, все, что мне действительно нужно, это третья пара чисел в этой строке (слева), и мне также было интересно, как пропустить первые две и последние пары чисел в этой строке. Я читал о разделителях, но я немного смущен тем, как их использовать. Код, который я до сих пор показан ниже, и в основном это информация для строк.

+2

Пожалуйстаиспользуйте функцию поиска стека или Google. есть ответы на все вопросы о том, как читать целые числа и преобразовывать строки в целые числа. –

+0

Возможный дубликат [Как разобрать строку на int в C++?] (Http://stackoverflow.com/questions/194465/how-to-parse-a-string-to-an-int-in-c) – Simon

+1

Он задает конкретный случай разбора некоторой части строки для int не всей строки. –

ответ

3

фона: Если мы знаем, начальные и конечные индексы (или длину) подстроки нам нужно, то мы можем читать его с помощью std::string::substr.

Его использование заключается в следующем:

#include <string> 

... 

std::string foo = "stack:overflow"; 

// start index = 4, length = 2 
std::string subStr1 = foo.substr(4,2); // result = "45" 

// start index = 3, end index = 5 => length = 5 - 3 + 1 = 3 
std::string subStr2 = foo.substr(3,3); // result = "345" 
// The first parameter is the start index whereas the second one is 
// the length of the wanted sub-string. 

// If only the start index is known: 
std::string subStr2 = foo.substr(9); // result = "9stack:overflow" 
// In that case we get the rest of the string starting from the start index 9. 

Для получения более подробной информации о том, что можно найти в: http://www.cplusplus.com/reference/string/string/substr/

Предлагаемое решение для ОП: Так как вы сказали «все, что мне действительно нужно это третья пара чисел ", то вам нужны два символа, начиная с индекса 6:

std::string a = "01:01:05:59"; 

std::string sub = a.substr(6, 2); // will give you "05" 

затем преобразовать их с помощью:

int number = std::stoi(sub); 

Эти шаги могут быть сокращены до:

int number = std::stoi(a.substr(6, 2)); 

Дальнейшие ссылки:

Первая часть: http://en.cppreference.com/w/cpp/string/basic_string/substr

Вторая часть: How to parse a string to an int in C++?

PS: если вы хотите использовать c haracter array вместо std::string, тогда вы можете просто получить символы с соответствующими индексами. Например: i = 6 и i = 7 в вашем конкретном случае. Затем получите yourArray[6]=0 и yourArray[7]=5. Затем выполните целочисленное преобразование.

1

Не могли бы вы сделать: int num = std::stoi(string.substr(6, 2);

+0

Выглядит хорошо! Голосуйте за вас! –

1

предполагая, что я прочитал "01:01:05:59" в строку

Один из простых способов является использование потоков:

#include <iostream> 
#include <sstream> 

int main() 
{ 
    int n[4]; 
    std::istringstream iss("02:30:41:28"); 
    if (iss >> n[0] && iss.get() == ':' && 
     iss >> n[1] && iss.get() == ':' && 
     iss >> n[2] && iss.get() == ':' && 
     iss >> n[3] >> std::ws && iss.eof()) 
     std::cout << n[0] << ' ' << n[1] << ' ' << n[2] << ' ' << n[3] << '\n'; 
    else 
     std::cerr << "parsing error\n"; 
} 

На ideone.com

+0

Это еще один приятный способ сделать это. Голосуйте за вас! –

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

  • Нет связанных вопросов^_^