2010-10-04 73 views
7

Xin chào Tôi biết nó đã được hỏi nhiều lần nhưng tôi không tìm thấy câu trả lời cho câu hỏi cụ thể của tôi.chuyển chuỗi thành số nguyên trong C++

Tôi chỉ muốn chuyển đổi chuỗi chỉ chứa số thập phân:

Ví dụ 256 là OK nhưng 256a thì không.

Có thể thực hiện mà không kiểm tra chuỗi không?

Cảm ơn

+2

Dòng chủ đề của bạn nói "chuyển đổi số nguyên thành chuỗi", nhưng loại câu hỏi của bạn dường như ngụ ý một chuyển đổi chuỗi thành từng phần ... bạn đang cố gắng làm gì ?! – EboMike

+1

Bài đăng này là mơ hồ và cần thêm dấu chấm câu. Bạn có thể giải thích những gì bạn có nghĩa là với một ví dụ? – JoshD

Trả lời

14

Cách đơn giản nhất mà làm cho kiểm tra lỗi không bắt buộc mà tôi có thể nghĩ ra là thế này:

char *endptr; 
int x = strtol(str, &endptr, 0); 
int error = (*endptr != '\0'); 
+0

những gì về 'atoi'? – Alcott

+1

Tôi không phải là fan của 'atoi' vì nó không cung cấp cách nào để nói sự khác biệt giữa một chuỗi hoàn toàn không hợp lệ và một chuỗi hợp lệ và chuyển đổi thành' 0' –

7

Trong C++ bằng cách nào, sử dụng 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; 
} 
+0

nhưng nếu chuỗi không phải là số nguyên thì sao? giá trị của 'a' là gì? –

+0

@ Jean-FrançoisFabre: Bạn có thể kiểm tra điều kiện luồng bằng cách xác minh trạng thái được trả về bởi 'sstr.rdstate()' hoặc bằng cách kiểm tra các giá trị trạng thái riêng lẻ. Tôi đã cập nhật câu trả lời của mình với lựa chọn thứ hai. – Donotalo

6

Một cách khác sử dụng Kiểu C++: Chúng tôi kiểm tra số chữ số để biết chuỗi có hợp lệ hay không:

#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; 
    } 

} 
+0

Không cho "0", "0001", "-5". – stark

Các vấn đề liên quan