Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chuỗi (String) trong C: Khai báo, khởi tạo, truy cập

Chuỗi trong C là gì?

Chuỗi = Mảng ký tự (char[]) kết thúc bằng ký tự null '\0' (giá trị 0).

Khai báo

char ten[50];        // Mảng 50 ký tự (tối đa 49 ký tự + '\0')
char ten[100] = {0}; // Khởi tạo toàn bộ = 0 (rỗng)

Khởi tạo

Cách 1: Danh sách ký tự (có '\0' thủ công)

char s[20] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Hoặc
char s[20] = {'H', 'e', 'l', 'l', 'o'};  // Phần còn lại tự động = 0

Cách 2: Hằng chuỗi (String literal) - Tự động thêm '\0'

char s[20] = "Hello";  // Tương đương {'H','e','l','l','o','\0',0,0...}
char *s = "Hello";     // Con trỏ đến hằng chuỗi (read-only!)

Chuỗi (String) trong C: Khai báo, khởi tạo, truy cập

Truy cập chuỗi

  • %s trong printf/scanf: in/đọc đến khi gặp '\0'
  • Duyệt bằng chỉ số: s[i]
  • Duyệt bằng con trỏ: *(s+i) hoặc p++

Chương trình ví dụ

#include <stdio.h>

int main() {
    char s[20] = "Hello";
    
    printf("Chuoi: %s\n", s);
    printf("Do dai: %lu\n", strlen(s));
    printf("Ky tu dau: %c\n", s[0]);
    printf("Ky tu cuoi: %c\n", s[strlen(s)-1]);
    
    // Duyệt từng ký tự
    printf("Cac ky tu: ");
    for (int i = 0; s[i] != '\0'; i++) {
        printf("'%c' ", s[i]);
    }
    printf("\n");
    
    return 0;
}

Kết quả

Chuoi: Hello
Do dai: 5
Ky tu dau: H
Ky tu cuoi: o
Cac ky tu: 'H' 'e' 'l' 'l' 'o'

Lưu ý quan trọng

Vấn đề Sai Đúng
Gán chuỗi sau khai báos = "Hi";strcpy(s, "Hi");
So sánh chuỗiif (s1 == s2)if (strcmp(s1,s2)==0)
Độ dàisizeof(s)strlen(s)
Nhập có khoảng trắngscanf("%s", s)fgets(s, size, stdin)

Các hàm thư viện quan trọng

Hàm Chức năng
strlen(s)Độ dài (không tính '\0')
strcpy(dest, src)Copy chuỗi
strncpy(dest, src, n)Copy n ký tự
strcat(dest, src)Nối chuỗi
strcmp(s1, s2)So sánh (0=bằng, <0 nhỏ hơn, >0 lớn hơn)
strchr(s, c)Tìm ký tự c đầu tiên
strstr(s1, s2)Tìm chuỗi con

Chương trình demo các hàm

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

int main() {
    char s1[50] = "Hello";
    char s2[50] = "World";
    char s3[100];
    
    printf("strlen(s1): %lu\n", strlen(s1));
    
    strcpy(s3, s1);
    printf("strcpy: %s\n", s3);
    
    strcat(s3, " ");
    strcat(s3, s2);
    printf("strcat: %s\n", s3);
    
    printf("strcmp(s1,s2): %d\n", strcmp(s1, s2));
    printf("strchr(s3, 'W'): %s\n", strchr(s3, 'W'));
    printf("strstr(s3, "World"): %s\n", strstr(s3, "World"));
    
    return 0;
}

Kết quả

strlen(s1): 5
strcpy: Hello
strcat: Hello World
strcmp(s1,s2): -15
strchr(s3, 'W'): World
strstr(s3, "World"): World

Nắm vững chuỗi là nền tảng để xử lý văn bản, parsing, network protocol, file I/O trong C.