Stack Overflow на русском Asked by user398776 on December 28, 2021
Например:
Строка "WORRY 5"
Нужно эту пятёрку преобразовать в int. Я использую функцию stoi для номера элемента, котором находится цифра, но получается ошибка. Как её исправить?
В общем случаи, нужно выполнить все проверки _ есть число или нет, есть после чисел другие символы или нет, число отрицательное или нет. Можно также обойтись только вызовом методов строкового объекта:
long long number_from_string(const std::string& s)
{
const std::string d("0123456789");
//индекс по которому найдена цифра и количество цифр
size_t k = s.find_first_of(d),
n = s.find_first_not_of(d, k + 1);
//если цифра не найдена
if (k == s.npos)
return 0; //или генерировать исключение
//если последующие все символы являются цифрой
if (n == s.npos)
n = s.size();
n -= k;
//проверяем является ли число отрицательным
bool minus = k > 0 && (s[k - 1] == '-') ? true : false;
//первая цифра
long long res = s[k] - '0';
//получение всего числа
while (--n) {
res *= 10;
res += s[++k] - '0';
}
return minus ? -res : res;
}
Answered by AR Hovsepyan on December 28, 2021
Вот так вот:
#include <iostream>
#include <cstdlib>
int main() {
const char* str = "WORRY 5";
int num = std::atoi(str + 6);
std::cout << num << 'n';
}
Но лучше так:
#include <sstream>
#include <string>
#include <iostream>
int main() {
const auto str = "WORRY 5";
std::istringstream stream{str};
std::string word;
int number;
stream >> word >> number;
std::cout << word << 'n' << number << 'n';
}
Answered by dIm0n on December 28, 2021
std::string str = "WORRY 5";
int n = std::stoi(str.substr(6, 1));
std::cout << n;
Answered by e.n.shirokov on December 28, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP