2013-12-13 18 views
11

Tôi đang cố gắng viết một hàm sẽ phát hiện khi tôi gần như ở cuối chuỗi, nhưng dường như nó không hoạt động.Phát hiện khi kết thúc chuỗi

Dưới đây là một số mã:

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == path.length()) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 

tôi đã cố gắng sử dụng ss.tellg() == path.length(), nhưng điều đó không làm việc. Có ai thay thế không?

+0

@ Dave Điều đó không làm việc, hoặc. – JNevens

Trả lời

12

I figured it out ..

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == -1) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 
+0

Umm ... Bạn không bao giờ trích xuất một giá trị thành 'số', vậy tại sao bạn lại cố in nó? – 0x499602D2

+2

Tốt hơn là chỉ cần thực hiện 'while (ss)'. EOF chỉ là một trong nhiều lý do khiến bạn không thể đọc từ luồng nữa. – pyon

+0

@ EduardoLeón là đúng. Khi 'ss' là sai, điều đó có nghĩa là bạn không thể đọc thêm nữa. Sau đó gọi 'ss.eof()' để biết liệu 'kết thúc của tập tin' có phải là lý do bạn không đọc được nữa không. – xuhdev

1
std::string path("1.2.3"); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
if (ss.peek() != '.') { 
    ss >> number; 
    if (ss.tellg() == -1) { 
     std::cout << "Last one: " << number; 
    } else { 
     std::cout << number; 
    } 
} else { ss.get(); } 
} 
Các vấn đề liên quan