2010-03-03 26 views
10

Chỉ với một trình biến đổi chuỗi :: std, có thể xác định điểm bắt đầu và điểm kết thúc của chuỗi không? Giả sử rằng tôi không có quyền truy cập đối tượng chuỗi và do đó không thể gọi string.begin() và string.end(), và tất cả những gì tôi có thể làm là tăng hoặc giảm trình lặp và kiểm tra giá trị.Sử dụng trình biến đổi chuỗi :: std để tìm bắt đầu và kết thúc chuỗi của nó

Cảm ơn, Phil

Trả lời

6

Câu trả lời ngắn gọn là không. Câu trả lời dài là, bởi vì vòng lặp không được dự kiến ​​sẽ biết về các vùng chứa hoặc phạm vi đang lặp lại, chúng chỉ được mong đợi là

  • Có thể chuyển đến phần tử tiếp theo (hoặc đến ngày tiếp theo hoặc trước))
  • Tự dereference để tiết lộ một tham chiếu đến giá trị mà họ đang trỏ đến
  • Và tất nhiên so sánh bản thân với các trình vòng lặp khác quan trọng nhất là trình kết thúc "cuối cùng".

Ngoài ra, một số trình vòng lặp nhất định có thể làm nhiều hơn chỉ ở trên, nhưng chủ yếu là tất cả chúng bắt buộc phải có/thực hiện ở trên dưới dạng này hoặc dạng khác.

+0

Yep bạn chắc chắn là cần lặp chỉ vào kết thúc hoặc bắt đầu so sánh trình lặp hiện tại của bạn, cái gì đó có thể được xác định khi bạn xác định chuỗi? – DogDog

1
  • Đối với điểm cuối của chuỗi: Giả sử chuỗi ký tự bên trong bị vô hiệu. Sau đó thông qua dereferencing các iterator để xem nếu họ '\ 0' để xác định vị trí tiếp theo là điểm kết thúc. Nhưng đối với chuỗi không kết thúc null khác, không thể tìm hiểu thông tin đó.
  • Đối với điểm bắt đầu của chuỗi: Không có cách nào để thực hiện việc đó.

Mặc định std :: string :: iterator chỉ là trình lặp ngẫu nhiên, hai hướng, không biết gì về vùng chứa.

Nhưng nếu bạn đang làm việc trên Visual nền tảng C++, có thể bạn có thể sử dụng một số cách hack như sau để có được sự kiểm soát để chứa nó, nhưng nó rất nguy hiểm:

// it is the passed in string::iterator parameter. 
    if (it._Has_container()) { 
     string* strRef = (string*)it._Mycont; 
    } 
Các vấn đề liên quan