Rõ ràng không có chức năng C tiêu chuẩn cho việc này. Vì vậy:
bool startsWith(const char *pre, const char *str)
{
size_t lenpre = strlen(pre),
lenstr = strlen(str);
return lenstr < lenpre ? false : strncmp(pre, str, lenpre) == 0;
}
Lưu ý rằng ở trên là tốt đẹp và rõ ràng, nhưng nếu bạn đang làm việc đó trong một vòng lặp chặt chẽ hoặc làm việc với rất chuỗi lớn, nó có thể không cung cấp hiệu suất tốt nhất, như nó quét toàn bộ chiều dài của cả hai dây lên phía trước (strlen
). Các giải pháp như wj32's hoặc Christoph's có thể cung cấp hiệu suất tốt hơn (mặc dù this comment về vectơ hóa nằm ngoài ken của tôi về C). Cũng xin lưu ý Fred Foo's solution để tránh strlen
trên str
(anh ấy đúng, không cần thiết). Chỉ có các vấn đề cho (rất) các chuỗi lớn hoặc sử dụng lặp lại trong các vòng chặt chẽ, nhưng khi nó quan trọng, nó quan trọng.
Nguồn
2011-01-22 22:26:26
Tôi nghĩ ví dụ thứ 3 của bạn sẽ có kết quả thực sự. –
@Burr: Có, đúng. – thejh