TransWikia.com

Как преобразовать часть строки в переменную типа int?

Stack Overflow на русском Asked by user398776 on December 28, 2021

Например:
Строка "WORRY 5"
Нужно эту пятёрку преобразовать в int. Я использую функцию stoi для номера элемента, котором находится цифра, но получается ошибка. Как её исправить?

3 Answers

В общем случаи, нужно выполнить все проверки _ есть число или нет, есть после чисел другие символы или нет, число отрицательное или нет. Можно также обойтись только вызовом методов строкового объекта:

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP