CÁC HÀM C / C++
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Hàm strchr() trong C/C++

Hàm strchr() là một trong những hàm chuỗi cơ bản nhưng lại rất hữu ích, giúp mình thực hiện các thao tác tìm kiếm ký tự trong chuỗi một cách dễ dàng.

Trong bài này, mình sẽ tìm hiểu về cú pháp và cách sử dụng của hàm strchr(), cùng với các ví dụ minh họa để hiểu rõ hơn về cách hoạt động của nó.

Cú pháp và cách sử dụng hàm strchr() trong C/C++

Cú pháp của hàm strchr()

Định nghĩa: Hàm strchr() được sử dụng để tìm vị trí của ký tự đầu tiên xuất hiện trong chuỗi.

Cú pháp:

char *strchr(const char *str, int c);

Trong đó:

  • str: Chuỗi mà chúng ta muốn tìm kiếm.
  • c: Ký tự mà chúng ta muốn tìm kiếm trong chuỗi.

Cách sử dụng hàm strchr() để tìm kiếm ký tự trong chuỗi

  • Hàm strchr() trả về con trỏ tới vị trí đầu tiên của ký tự c trong chuỗi str. Nếu không tìm thấy ký tự c, hàm trả về NULL.

Ví dụ:

const char *str = "freetuts.net";
char *ptr = strchr(str, 'u');
if (ptr != NULL) {
    printf("Ký tự 'u' xuất hiện đầu tiên ở vị trí %ld\n", ptr - str);
} else {
    printf("Ký tự 'u' không được tìm thấy trong chuỗi.\n");
}

Output:

Ký tự 'u' xuất hiện đầu tiên ở vị trí 5

Cách sử dụng hàm strchr() để tìm kiếm một chuỗi con trong chuỗi

  • Hàm strchr() cũng có thể được sử dụng để tìm kiếm một chuỗi con trong chuỗi.

Ví dụ:

const char *str = "Freetuts.net";
const char *substr = ".net";
char *ptr = strchr(str, 'W');
if (ptr != NULL) {
    if (strncmp(ptr, substr, strlen(substr)) == 0) {
        printf("Chuỗi con '%s' được tìm thấy trong chuỗi.\n", substr);
    } else {
        printf("Chuỗi con '%s' không được tìm thấy trong chuỗi.\n", substr);
    }
} else {
    printf("Ký tự 'W' không được tìm thấy trong chuỗi.\n");
}

Output:

Chuỗi con '.net' được tìm thấy trong chuỗi.

Cách xử lý trường hợp lỗi hàm strchr() trong C/C++

Xử lý trường hợp chuỗi không kết thúc bằng ký tự null-terminator

Trong trường hợp chuỗi không kết thúc bằng ký tự null-terminator ('\0'), hàm strchr() có thể không hoạt động đúng.

Để giải quyết vấn đề này, mình cần đảm bảo rằng chuỗi được truyền vào hàm strchr() luôn kết thúc bằng ký tự null-terminator.

Ví dụ:

char str[] = {'H', 'e', 'l', 'l', 'o'};
char *ptr = strchr(str, 'l');
if (ptr != NULL) {
    printf("Ký tự 'l' xuất hiện đầu tiên ở vị trí %ld\n", ptr - str);
} else {
    printf("Ký tự 'l' không được tìm thấy trong chuỗi.\n");
}

Output:

Ký tự 'l' không được tìm thấy trong chuỗi.

Xử lý trường hợp tham số không hợp lệ

Trong trường hợp tham số được truyền vào hàm strchr() không hợp lệ (ví dụ: con trỏ chuỗi là NULL), hàm có thể không hoạt động đúng hoặc gây ra lỗi.

Mình cần kiểm tra và xử lý các trường hợp này để đảm bảo tính ổn định của chương trình.

Ví dụ:

const char *str = NULL;
char *ptr = strchr(str, 'H');
if (ptr != NULL) {
    printf("Ký tự 'H' được tìm thấy trong chuỗi.\n");
} else {
    printf("Lỗi: Tham số không hợp lệ.\n");
}

Output:

Lỗi: Tham số không hợp lệ.

So sánh với các hàm tương tự của hàm strchr() trong C/C++

So sánh với hàm strrchr()

  • Hàm strrchr() cũng được sử dụng để tìm kiếm ký tự trong chuỗi nhưng trả về con trỏ đến vị trí cuối cùng của ký tự được tìm thấy.
  • Khác với strchr() chỉ trả về con trỏ đến vị trí đầu tiên của ký tự.

Ví dụ:

const char *str = "freetuts.net";
char *ptr = strrchr(str, 'e');
if (ptr != NULL) {
    printf("Ký tự 'e' xuất hiện cuối cùng ở vị trí %ld\n", ptr - str);
} else {
    printf("Ký tự 'e' không được tìm thấy trong chuỗi.\n");
}

Output:

Ký tự 'e' xuất hiện cuối cùng ở vị trí 3

So sánh với hàm strstr()

  • Hàm strstr() được sử dụng để tìm kiếm một chuỗi con trong chuỗi cha.
  • Trả về con trỏ đến vị trí đầu tiên của chuỗi con trong chuỗi cha.

Ví dụ:

const char *str = "freetuts.net";
const char *subStr = ".net";
char *ptr = strstr(str, subStr);
if (ptr != NULL) {
    printf("Chuỗi con '%s' được tìm thấy trong chuỗi '%s' tại vị trí %ld\n", subStr, str, ptr - str);
} else {
    printf("Chuỗi con '%s' không được tìm thấy trong chuỗi '%s'\n", subStr, str);
}

Output:

Chuỗi con '.net' được tìm thấy trong chuỗi 'freetuts.net' tại vị trí 8

Ví dụ minh họa của hàm strchr() trong C/C++

Ví dụ về cách sử dụng hàm strchr() để tìm kiếm ký tự trong chuỗi

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "freetuts.net";
    char ch = 't';
    char *ptr = strchr(str, ch);
    if (ptr != NULL) {
        printf("Ký tự '%c' được tìm thấy trong chuỗi '%s' tại vị trí %ld\n", ch, str, ptr - str);
    } else {
        printf("Ký tự '%c' không được tìm thấy trong chuỗi '%s'\n", ch, str);
    }
    return 0;
}

Output:

Ký tự 't' được tìm thấy trong chuỗi 'freetuts.net' tại vị trí 4

Ví dụ về cách sử dụng hàm strchr() để tìm kiếm một chuỗi con trong chuỗi

#include <stdio.h>
#include <string.h>

int main() {
    const char *str = "Tự học lập trình tại freetuts.net";
    const char *subStr = "freetuts.net";
    char *ptr = strchr(str, subStr[0]); // Tìm ký tự đầu tiên của chuỗi con
    if (ptr != NULL) {
        // Kiểm tra xem chuỗi con có nằm trong chuỗi gốc hay không
        if (strncmp(ptr, subStr, strlen(subStr)) == 0) {
            printf("Chuỗi con '%s' được tìm thấy trong chuỗi '%s' tại vị trí %ld\n", subStr, str, ptr - str);
        } else {
            printf("Chuỗi con '%s' không được tìm thấy trong chuỗi '%s'\n", subStr, str);
        }
    } else {
        printf("Chuỗi con '%s' không được tìm thấy trong chuỗi '%s'\n", subStr, str);
    }
    return 0;
}

Output:

Chuỗi con 'freetuts.net' được tìm thấy trong chuỗi 'Tự học lập trình tại freetuts.net' tại vị trí 30

Kết bài

Trong bài viết này, mình đã tìm hiểu về hàm strchr() trong ngôn ngữ lập trình C/C++. Mình đã đi sâu vào cú pháp, cách sử dụng và các trường hợp xử lý lỗi phổ biến khi sử dụng hàm này. Bên cạnh đó, qua các ví dụ minh họa và bài tập thực hành, chúng ta đã nắm vững cách áp dụng hàm strchr() để thực hiện các tác vụ tìm kiếm trong chuỗi một cách linh hoạt và hiệu quả.

Hy vọng rằng những kiến thức trong bài viết này sẽ giúp bạn hiểu rõ hơn về hàm strchr() và áp dụng nó trong công việc lập trình hàng ngày của mình.

test php

Bài giải

-------------------- ######## --------------------

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý thời gian (time.h) trong C

Thread Pools và Parallel Algorithms trong C++

Thread Pools và Parallel Algorithms trong C++

Tạo và quản lý các Multithreading trong C++

Tạo và quản lý các Multithreading trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Try, Catch, và Throw của Exception Handling trong C++

Try, Catch, và Throw của Exception Handling trong C++

Cách sử dụng Lambda Expressions trong C++

Cách sử dụng Lambda Expressions trong C++

Sử dụng weak_ptr trong C++

Sử dụng weak_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng unique_ptr trong C++

Sử dụng unique_ptr trong C++

Tổng quan về Smart Pointers trong C++

Tổng quan về Smart Pointers trong C++

Sử dụng Iterators trong STL của C++

Sử dụng Iterators trong STL của C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng trong List trong C++

[Iterator] Sử dụng trong List trong C++

[STL] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

Tổng quan về Iterators trong C++

Tổng quan về Iterators trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

Top