преобразовать строку в целое число в C ++ - PullRequest
7 голосов
/ 05 октября 2010

Hello Я знаю, что это задавали много раз, но я не нашел ответа на свой конкретный вопрос.

Я хочу преобразовать только строку, содержащую только десятичные числа:

Например, 256 - это нормально, а 256a - нет.

Может ли это быть сделано без проверки строки?

Спасибо

Ответы [ 3 ]

14 голосов
/ 05 октября 2010

Самый простой способ сделать проверку ошибок необязательным, о чем я могу думать, это:

char *endptr;
int x = strtol(str, &endptr, 0);
int error = (*endptr != '\0');
7 голосов
/ 05 октября 2010

C ++, используйте stringstream:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    stringstream sstr;
    int a = -1;

    sstr << 256 << 'a';
    sstr >> a;

    if (sstr.failbit)
    {
        cout << "Either no character was extracted, or the character can't represent a proper value." << endl;
    }
    if (sstr.badbit)
    {
        cout << "Error on stream.\n";
    }

    cout << "Extracted number " << a << endl;

    return 0;
}
6 голосов
/ 06 октября 2010

Другой способ с использованием стиля c ++: мы проверяем количество цифр, чтобы узнать, была ли строка правильной или нет:

#include <iostream>
#include <sstream>
#include <string>
#include <cmath>

int main(int argc,char* argv[]) {

    std::string a("256");

    std::istringstream buffer(a);
    int number;
    buffer >> number; // OK conversion is done !
    // Let's now check if the string was valid !
    // Quick way to compute number of digits
    size_t num_of_digits = (size_t)floor( log10( abs( number ) ) ) + 1;
    if (num_of_digits!=a.length()) {
        std::cout << "Not a valid string !" << std::endl;
    }
    else {
        std::cout << "Valid conversion to " << number  << std::endl;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...