2012-09-27 51 views
13

Tôi đang cố gắng chuyển đổi một số std::string được lưu trữ trong một số std::vector thành một số nguyên và chuyển nó thành một hàm làm tham số.Chuyển đổi std :: string thành số nguyên

Đây là một phiên bản đơn giản của mã của tôi:

vector <string> record; 
functiontest(atoi(record[i].c_str)); 

lỗi của tôi là như sau:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’ 

Làm thế nào tôi có thể làm điều này?

+0

Bạn cần * gọi * nó, nhưng có rất nhiều phương pháp tốt hơn 'atoi'. – chris

+3

Bản ghi Typo '[i] .c_str' ->' bản ghi [i] .c_str() '. – Hindol

Trả lời

29

Với C++ 11:

int value = std::stoi(record[i]); 
+4

Khá hữu ích. Đối với thấp hơn C++ 11, có bất kỳ ví dụ vững chắc nào không? –

+11

** Reader Ghi chú: ** Nếu bạn không chắc chắn 100% đầu vào cho 'std :: stoi' sẽ ** luôn là số nguyên hợp lệ **, bạn sẽ cần thiết lập' try/catch' cho 'std :: invalid_argument'. – CodeMouse92

+1

Và cũng cho 'std :: out_of_range'. – ebk

11
record[i].c_str 

là không giống như

record[i].c_str() 

Bạn thực sự có thể có được điều này từ các thông báo lỗi: chức năng hy vọng một const char*, nhưng bạn đang cung cấp một đối số kiểu const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const mà là một con trỏ đến một hàm thành viên của lớp std::basic_string<char, std::char_traits<char>, std::allocator<char> > trả về một const char* và không có đối số.

+0

Rất tiếc! Cảm ơn bạn đời ahah –

+0

@Luchiab Grigore –

+0

Tôi có thể xem câu trả lời khác tốt hơn như thế nào, nhưng tôi không nghĩ câu trả lời này xứng đáng là ... –

12

Sử dụng chuỗi thư từ thư viện chuẩn. Đó là sạch và nó thay vì C++ hơn C.

int i3; 
std::stringstream(record[i]) >> i3; 
+0

hoặc http: // vi .cppreference.com/w/cpp/string/basic_string/stol –

+0

@ BЈовић Rất đẹp. Đối với C++ 11 trở đi mặc dù – Indy9000

+0

tôi đoán nó phải được sloooow như bất kỳ dòng suối – javapowered

0
#include <boost/lexical_cast.hpp> 

functiontest(boost::lexical_cast<int>(record[i])); 
Các vấn đề liên quan