2010-02-27 104 views
6

Tôi có chuỗi bắt đầu bằng nhiều khoảng trắng. Nếu tôi muốn tìm ra vị trí của nhân vật đầu tiên không phải là một không gian, tôi sẽ làm như thế nào?Cách tìm ký tự đầu tiên trong chuỗi C++

+2

Chuỗi mã hóa của bạn là gì? Nếu đó là ASCII, thì chỉ có 4 ký tự trắng, và giải pháp của Vlad với find_first_not_of là tốt. Các chuỗi ASCII hoặc Latin 1 có thể bao gồm các bài tập dạy học. Nếu chuỗi của bạn là UTF-8 hoặc một ký tự rộng std :: wstring (vì nó có thể nằm trong một ứng dụng thực) thì hãy hỏi một câu hỏi khác. –

+0

Có, trong những trường hợp này người ta có thể sử dụng giải pháp 'find_if' ở botom của cùng một bài (tùy ý sử dụng' boost :: labda :: BLL's '(isspace, _1, my_locale)' để liên kết một miền địa phương cụ thể ' my_locale' thành 'isspace' thay vì sử dụng mặc định). – vladr

Trả lời

15

Xem std::string::find_first_not_of.

Để tìm vị trí (index) của nhân vật không gian đầu tiên:

str.find_first_not_of(' '); 

Để tìm vị trí (index) của nhân vật phi trống đầu tiên:

str.find_first_not_of(" \t\r\n"); 

Nó trả về str.npos nếu str trống hoặc chứa toàn bộ khoảng trống.

Bạn có thể sử dụng find_first_not_of để cắt vi phạm khoảng trống hàng đầu:

str.erase(0, str.find_first_not_of(" \t\r\n")); 

Nếu bạn không muốn hardcode mà nhân vật được tính là khoảng trống (ví dụ sử dụng một miền địa phương), bạn vẫn có thể tận dụng của isspacefind_if theo nhiều cách hoặc ít hơn theo cách ban đầu được đề xuất bởi sbi, nhưng cẩn thận để phủ nhận isspace, ví dụ:

string::iterator it_first_nonspace = find_if(str.begin(), str.end(), not1(isspace)); 
// e.g. number of blank characters to skip 
size_t chars_to_skip = it_first_nonspace - str.begin(); 
// e.g. trim leading blanks 
str.erase(str.begin(), it_first_nonspace); 
5

Tôi chỉ có một câu hỏi: bạn có thực sự cần thêm khoảng trống không?

tôi sẽ gọi sức mạnh của Boost.String đó;)

std::string str1 = "  hello world!  "; 
std::string str2 = boost::trim_left_copy(str1); // str2 == "hello world!  " 

Có rất nhiều hoạt động (find, trim, replace ...) cũng như các vị từ có sẵn trong thư viện này, bất cứ khi nào bạn cần string hoạt động không được cung cấp ngoài hộp, hãy kiểm tra tại đây. Ngoài ra các thuật toán có một số biến thể mỗi lần (phân biệt dạng chữ và sao chép nói chung).

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