Я понял, что это было. Просто запросы находились на рассмотрении, и мне пришлось сделать httpBackend.flush ().
std::string strInput = "Total disk space: 9852465";
std::string strNumber = "0";
size_t iIndex = strInput.rfind(": ");
if(iIndex != std::string::npos && strInput.length() >= 2)
{
strNumber = strInput.substr(iIndex + 2, strInput.length() - iIndex - 2)
}
Для полноты вот простое решение в C:
int value;
if(sscanf(mystring.c_str(), "%*[^:]:%d", &value) == 1)
// parsing succeeded
else
// parsing failed
Объяснение: %*[^:]
говорит для чтения в как много возможных символов, которые не являются двоеточиями, и *
подавляет присвоение. Затем целое число читается в после двоеточия и любого прошедшего пробела.
Я не могу только маркировать на пространстве (использующий поток и <<), потому что текст перед двоеточием может или не может иметь пробелов в нем.
Право, но можно использовать std::getline
:
string not_number;
int number;
if (not (getline(cin, not_number, ':') and cin >> number)) {
cerr << "No number found." << endl;
}
Подобный ответу Konrads, но использованию istream::ignore
:
int number;
std::streamsize max = std::numeric_limits<std::streamsize>::max();
if (!(std::cin.ignore(max, ':') >> number)) {
std::cerr << "No number found." << std::endl;
} else {
std::cout << "Number found: " << number << std::endl;
}
Я удивлен, что никто не упомянул регулярные выражения. Они были добавлены как часть TR1 и включены в Повышение также. Вот решение с помощью regex's
typedef std::tr1::match_results<std::string::const_iterator> Results;
std::tr1::regex re(":[[:space:]]+([[:digit:]]+)", std::tr1::regex::extended);
std::string str("Sectors: 4095");
Results res;
if (std::tr1::regex_search(str, res, re)) {
std::cout << "Number found: " << res[1] << std::endl;
} else {
std::cerr << "No number found." << std::endl;
}
Это похоже на намного большее количество работы, но Вы вытаскиваете больше из него, по моему скромному мнению.
const std::string pattern(": ");
std::string s("Sectors: 4095");
size_t num_start = s.find(pattern) + pattern.size();