Hàm strstr() trong C/C++
Trong lập trình C/C++, việc xử lý chuỗi là một phần quan trọng và phổ biến trong nhiều ứng dụng. Để tìm kiếm một chuỗi con trong một chuỗi lớn, chúng ta có thể sử dụng hàm strstr()
. Hàm này giúp mình tìm ra vị trí xuất hiện đầu tiên của chuỗi con trong chuỗi cha.
Trong bài này, mình sẽ tìm hiểu về cú pháp, cách sử dụng và các trường hợp xử lý lỗi khi sử dụng hàm strstr()
, cùng với ví dụ minh họa và bài tập thực hành để nắm vững cách sử dụng hàm này. Hãy cùng đi vào chi tiết của chủ đề này.
Cú pháp và cách sử dụng hàm strstr() trong C/C++
Cú pháp của hàm strstr()
Cú pháp của hàm strstr() trong C/C++ như sau:
char *strstr(const char *str1, const char *str2);
- Trong đó, str1 là chuỗi cần tìm kiếm, và str2 là chuỗi con mà bạn muốn tìm trong str1.
Cách sử dụng hàm strstr()
Tìm kiếm một chuỗi con trong chuỗi cha .Hàm strstr() trả về con trỏ đến vị trí đầu tiên của chuỗi con nếu tìm thấy, và trả về NULL nếu không tìm thấy.
Ví dụ:
const char *str = "Tự học lập trình tại freetuts.net"; const char *subStr = "freetuts.net"; char *result = strstr(str, subStr); if (result != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", subStr, result - str); } else { printf("Chuoi con '%s' khong tim thay trong chuoi '%s'\n", subStr, str); }
Điều chỉnh cách sử dụng hàm strstr() với các kiểu dữ liệu khác nhau
Sử dụng với chuỗi ký tự:
char str[] = "Tự học lập trình tại freetuts.net"; char subStr[] = "freetuts.net"; char *result = strstr(str, subStr);
Sử dụng với mảng ký tự:
char str[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'}; char subStr[] = {'t', 'e', 's', 't', '\0'}; char *result = strstr(str, subStr);
Sử dụng với std::string:
#include <iostream> #include <string> using namespace std; string str = "freetuts.net"; string subStr = "net"; size_t pos = str.find(subStr); if (pos != string::npos) { cout << "Chuoi con 'net' duoc tim thay tai vi tri: " << pos << endl; } else { cout << "Chuoi con 'net' khong tim thay trong chuoi 'freetuts.net'" << endl; }
Cách xử lý trường hợp lỗi khi sử dụng hàm strstr() trong C/C++
Xử lý trường hợp khi chuỗi không kết thúc bằng ký tự null-terminator
- Khi sử dụng hàm strstr(), bạn cần đảm bảo rằng chuỗi đầu vào phải kết thúc bằng ký tự null-terminator để tránh lỗi xảy ra.
Ví dụ:
char str[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g'}; char subStr[] = "test"; char *result = strstr(str, subStr); if (result != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", subStr, result - str); } else { printf("Chuoi con '%s' khong tim thay trong chuoi\n", subStr); }
Xử lý trường hợp tham số không hợp lệ
- Nếu tham số truyền vào hàm strstr() không hợp lệ (ví dụ: NULL), hàm này có thể không hoạt động đúng và gây ra lỗi.
- Ví dụ:
char *str = NULL; char *subStr = "freetuts.net"; char *result = strstr(str, subStr); if (result != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", subStr, result - str); } else { printf("Chuoi con '%s' khong tim thay trong chuoi\n", subStr); }
So sánh với các hàm tương tự trong C/C++
So sánh với hàm strchr()
- Hàm
strstr()
được sử dụng để tìm kiếm một chuỗi con trong một chuỗi lớn, trong khi hàmstrchr()
được sử dụng để tìm kiếm một ký tự cụ thể trong chuỗi. strstr()
trả về con trỏ đến vị trí đầu tiên của chuỗi con được tìm thấy, trong khistrchr()
trả về con trỏ đến vị trí đầu tiên của ký tự được tìm thấy.
Ví dụ:
char str[] = "freetuts.net"; char *ch = strchr(str, 'e'); if (ch != NULL) { printf("Ky tu 'e' duoc tim thay tai vi tri: %ld\n", ch - str); } else { printf("Ky tu 'e' khong tim thay trong chuoi\n"); }
So sánh với hàm strcmp()
- Hàm
strstr()
được sử dụng để tìm kiếm một chuỗi con trong một chuỗi lớn, trong khi hàmstrcmp()
được sử dụng để so sánh hai chuỗi. strstr()
trả về con trỏ đến vị trí đầu tiên của chuỗi con được tìm thấy, trong khistrcmp()
trả về một giá trị nguyên dương nếu chuỗi thứ nhất lớn hơn chuỗi thứ hai, một giá trị nguyên âm nếu chuỗi thứ nhất nhỏ hơn chuỗi thứ hai, và 0 nếu hai chuỗi bằng nhau.
Ví dụ:
char str1[] = "Freetuts"; char str2[] = ".net"; int result = strcmp(str1, str2); if (result < 0) { printf("Chuoi str1 nho hon str2\n"); } else if (result > 0) { printf("Chuoi str1 lon hon str2\n"); } else { printf("Hai chuoi bang nhau\n"); }
Ví dụ minh họa hàm strstr() trong C/C++
Ví dụ về cách sử dụng hàm strstr() để tìm kiếm một chuỗi con trong chuỗi cha:
#include <stdio.h> #include <string.h> int main() { char str[] = "Chào mừng bạn đến với lập trình C/C++ tại freetut.net."; char sub[] = "net"; char *result = strstr(str, sub); if (result != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", sub, result - str); } else { printf("Khong tim thay chuoi con trong chuoi cha\n"); } return 0; }
Output:
Chuoi con 'net' duoc tim thay tai vi tri: 65
Bài tập thực hành
Viết các đoạn mã sử dụng hàm strstr()
để thực hiện các tác vụ tìm kiếm khác nhau trong chuỗi:
#include <stdio.h> #include <string.h> int main() { char str[] = " Tự học lập trình miễn phí tại freetuts.net"; char *search1 = "miễn phí "; char *search2 = "freetuts.net"; char *search3 = "nonexistent"; // Tìm kiếm từ "simple" trong chuỗi str char *result1 = strstr(str, search1); if (result1 != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", search1, result1 - str); } else { printf("Khong tim thay chuoi con '%s' trong chuoi cha\n", search1); } // Tìm kiếm từ "example" trong chuỗi str char *result2 = strstr(str, search2); if (result2 != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", search2, result2 - str); } else { printf("Khong tim thay chuoi con '%s' trong chuoi cha\n", search2); } // Tìm kiếm từ "nonexistent" trong chuỗi str char *result3 = strstr(str, search3); if (result3 != NULL) { printf("Chuoi con '%s' duoc tim thay tai vi tri: %ld\n", search3, result3 - str); } else { printf("Khong tim thay chuoi con '%s' trong chuoi cha\n", search3); } return 0; }
Output:
Kết bài
Trong bài viết này, mình đã tìm hiểu về hàm strstr() trong ngôn ngữ lập trình C/C++. Ta đã tìm hiểu cú pháp và cách sử dụng hàm này để tìm kiếm một chuỗi con trong một chuỗi cha. Bên cạnh đó, cũng đã đi sâu vào xử lý trường hợp lỗi và so sánh với các hàm tương tự như strchr()
và strcmp().
Cuối cùng, mình đã thực hành qua các ví dụ minh họa và bài tập, giúp củng cố kiến thức về cách sử dụng hàm strstr() để tìm kiếm các chuỗi con trong chuỗi. Hy vọng rằng thông qua bài viết này, bạn đã hiểu rõ hơn về cách sử dụng và áp dụng hàm strstr() trong quá trình lập trình C/C++.
Bài giải
-------------------- ######## --------------------
Câu hỏi thường gặp liên quan:
- Hàm strcpy() trong C/C++
- Hàm strlen() trong C/C++
- Hàm strcat() trong C/C++
- Hàm strcmp() trong C/C++
- Hàm strchr() trong C/C++
- Hàm strstr() trong C/C++
- Hàm atof() trong C/C++
- Hàm strtol() và strtoul() trong C/C++
- Hàm isalnum() trong C/C++
- Hàm isalpha() trong C/C++
- Hàm isdigit() trong C/C++
- Hàm islower(), isupper() trong C/C++
- Hàm memset() trong C/C++
- Hàm memcpy() trong C/C++
- Hàm memmove() trong C/C++