2012-02-09 24 views
8

im cố gắng để có std::string giá trị và sử dụng nó như delimiter trong std::getline() chức năng nhưng không có mater những gì tôi làm trình biên dịch mang lại cho tôi lỗi. đây là những gì tôi đang cố gắng thực hiện:Tring để chuyển đổi chuỗi str để sử dụng trong std :: getline delimiter

std::stringstream ss(s); 
    std::string item; 
    std::string delim ="&&="; 
    int ssize = delim.size(); 
    int newssize = ssize+1; 
    char del[SSIZE]; // also here when i try gives error 
    strcpy(del,delim.c_str()); 

     char * delrr[1024] = delim.c_str(); //gives error 

     while(std::getline(ss,item,delrr)) { 
      elems.push_back(item); 
    } 

lỗi nhận được luôn là về const char * convertion.

error C2440: 'initializing' : cannot convert from 'const char *' to 'char *[1024]' 
1>  There are no conversions to array types, although there are conversions to references or pointers to arrays 
1>.\UT.cpp(179) : error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(527) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2782: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : template parameter '_Elem' is ambiguous 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>  could be 'char **' 
1>  or  'char' 

UPDATE:
tìm thấy câu trả lời: How do I tokenize a string in C++?
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer

+2

Bạn có thể muốn * char delrr [1024] * thay vì * char * delrr [1024] * – Gigi

+0

Vui lòng quay lại và giải thích những gì bạn thực sự muốn làm bằng tiếng Anh mà không đề cập đến bất kỳ chi tiết triển khai nào. –

+0

không thể chuyển đổi từ 'const char *' thành 'char [1024]' nếu tôi xóa * – user63898

Trả lời

4

Đối số thứ ba của getline() là một char, không phải mảng char. Xem this. Bạn không thể sử dụng hàm này nếu bạn cần nhiều dấu phân cách hoặc dấu phân tách được tạo thành từ nhiều ký tự.

+0

Hmm vì vậy tôi có thể làm gì để có thể sử dụng dấu phân cách lớn hơn sau đó một char? – user63898

+0

Cũng là một vấn đề, nhưng anh ta gặp lỗi của mình trước khi anh ta đến được hàng đó. –

+0

@ user63898: Bạn cần phải tìm kiếm chuỗi con được sử dụng làm dấu tách và trích xuất các phần tử giữa các dấu phân tách. find() và substr() là bạn của bạn. –

3

std :: string :: c_str() cung cấp cho bạn một con trỏ đến một mảng ký tự. Để điền vào một mảng ký tự có kết quả của cuộc gọi đến c_str(), bạn sẽ cần phải sử dụng strcpy() hoặc strncpy() vì những thứ đó thực sự sao chép chuỗi kiểu C.

Ngoài ra, bạn đã tuyên bố delrr là một mảng gồm 1024 ký tự con trỏ thay vì 1024 ký tự, đó thực sự là ý định?

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