>백엔드 개발 >C++ >C에서 오류 처리를 사용하여 문자열을 정수로 변환하는 방법은 무엇입니까?

C에서 오류 처리를 사용하여 문자열을 정수로 변환하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-06 03:38:02861검색

How to Convert Strings to Integers with Error Handling in C  ?

C에서 오류 처리를 사용하여 문자열을 정수로 변환

프로그래밍에서는 문자열을 정수로 변환해야 하는 경우가 많습니다. C에서는 이러한 목적으로 std::atoi 함수를 제공하지만 변환 오류를 정상적으로 처리하지는 않습니다. 이 문제를 해결하기 위해 우리는 C#의 Int32.TryParse와 유사한 오류 처리를 허용하는 솔루션을 찾습니다.

Boost의 Lexical Cast 함수

효율적인 접근 방식은 Boost 라이브러리의 lexical_cast 함수를 사용하는 것입니다. . 다양한 데이터 유형을 지원하며 캐스트가 실패하면 예외를 발생시킬 수 있습니다. 예는 다음과 같습니다.

<code class="cpp">#include <boost/lexical_cast.hpp>

int main() {
    std::string s;
    std::cin >> s;

    try {
        int i = boost::lexical_cast<int>(s);

        // ...
    } catch (...) {
        // Handle error
    }
}</code>

표준 라이브러리 함수 사용

Boost를 사용할 수 없는 경우 std::stringstream 및 >> 연산자를 사용할 수 있습니다:

<code class="cpp">#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string s;
    std::cin >> s;

    try {
        std::stringstream ss(s);

        int i;
        if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
            throw std::bad_cast();
        }

        // ...
    } catch (...) {
        // Handle error
    }
}</code>

Boost의 Lexical Cast 가짜

최종 대안으로 Boost의 lexical_cast 함수의 "가짜" 버전을 만들 수 있습니다.

<code class="cpp">#include <iostream>
#include <sstream>
#include <string>

template <typename T>
T lexical_cast(const std::string& s) {
    std::stringstream ss(s);

    T result;
    if ((ss >> result).fail() || !(ss >> std::ws).eof()) {
        throw std::bad_cast();
    }

    return result;
}

int main() {
    std::string s;
    std::cin >> s;

    try {
        int i = lexical_cast<int>(s);

        // ...
    } catch (...) {
        // Handle error
    }
}</code>

투척 없음 버전

투척 없음 버전이 필요한 경우 적절한 예외를 포착하고 성공 또는 실패를 나타내는 부울을 반환합니다.

<code class="cpp">template <typename T>
bool lexical_cast(const std::string& s, T& t) {
    try {
        t = lexical_cast<T>(s);
        return true;
    } catch (const std::bad_cast& e) {
        return false;
    }
}

int main() {
    std::string s;
    std::cin >> s;

    int i;
    if (!lexical_cast(s, i)) {
        std::cout << "Bad cast." << std::endl;
    }
}</code>

위 내용은 C에서 오류 처리를 사용하여 문자열을 정수로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.