Khóa học c

Strings trong C

0 phút đọc

Trong bài học này, chúng ta sẽ tìm hiểu về chuỗi trong lập trình C. Ta sẽ học cách khai báo chúng, khởi tạo chúng và sử dụng chúng cho các hoạt động Input / Output khác nhau thông qua các ví dụ.

  • Khai báo chuỗi
  • Khởi tạo chuỗi
  • Gán giá trị cho chuỗi
  • Đọc chuỗi từ người dùng
  • Truyền chuỗi vào mảng
  • Chuỗi và con trỏ

Chuỗi trong C là gì

Chuỗi là một mảng các kí tự được kết thúc bằng kí tự null \0.

Ví dụ:

cpp Copy
char c[] = "Hello Kungfutech";

Khi trình biên dịch gặp một chuỗi các ký tự được đặt trong dấu ngoặc kép, theo mặc định, nó sẽ thêm một ký tự null vào cuối.

H e l l o K u n g f u t e c h \0

Khởi tạo chuỗi trong C

Đây là cách ta khai báo một chuỗi gồm 10 kí tự:

cpp Copy
char str[10];

Khởi tạo chuỗi

Ta có thể khởi ta một chuỗi bằng một trong các cách sau:

cpp Copy
char c[] = "abcde";

char c[50] = "abcde";

char c[] = {'a', 'b', 'c', 'd', 'e', '\0'};

char c[6] = {'a', 'b', 'c', 'd', 'e', '\0'};
c[0] c[1] c[2] c[3] c[4] c[5]
a b c d e \0

Hoặc cũng có thể khởi tạo như sau

cpp Copy
char c[5] = "abcde";

Lúc này, ta đang cố gán 6 ký tự (ký tự cuối cùng là \0) cho một mảng c có 5 ký tự. Điều này thật tệ và ta không nên làm như thế.

Gán giá trị vào chuỗi trong C

Chuỗi không hỗ trợ cho toán tử gán = nên ta phải dùng hàm strcpy() để sao chép chuỗi.

Ví dụ:

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

int main()
{
  char c[100];
  //c = "Hello Kungfutech"; //error
  strcpy(c, "Hello Kungfutech");
  puts(c);
}

Kết quả

Hello Kungfutech

Lưu ý

Khi sử dụng hàm strcpy() hãy khai báo thư viên <string.h>

Đọc chuỗi từ người dùng

Chúng ta có thể sử dụng hàm scanf() để đọc một chuỗi.

Hàm scanf() giúp ta đọc chuỗi ký tự cho đến khi nó gặp khoảng trắng (dấu cách, dòng mới, tab,...).

Ví dụ:

cpp Copy
#include <stdio.h>
int main()
{
    char name[20];
    printf("Enter name: ");
    scanf("%s", name);
    printf("Your name is %s.", name);
    return 0;
}

Kết quảEnter name: Kungfutech Academy

Your name is Kungfutech.

Mặc dù Kungfutech Academy đã được nhập tại chương trình trên nhưng chỉ Kungfutech được lưu trữ tại string name, đó là vì có một khoảng trắng đằng sau Kungfutech

Vậy làm thế nào để đọc một dòng văn bản?

Chúng ta sử dụng hàm fgets() để đọc một dòng văn bản

Ví dụ:

cpp Copy
#include <stdio.h>
int main()
{
    char name[30];
    printf("Enter name: ");
    fgets(name, sizeof(name), stdin);
    printf("Name: ");
    puts(name);
    return 0;
}

Kết quả

Enter name: Kungfutech Academy
Name: Kungfutech Academy

Tại chương trình trên ta đã sử dụng hàm fgets() để đọc một chuỗi văn bản từ người dùng và hàm puts() để hiển thị văn bản đó.

cpp Copy
fgets(name, sizeof(name), stdin);
//code
puts(name);

sizeof(name) sẽ mang giá trị là 30, do đó chúng ta có thể đọc được một chuỗi tối đa 30 kí tự.

Truyền chuỗi vào hàm trong C

Các chuỗi có thể được truyền cho một hàm theo cách tương tự như các mảng.

Ví dụ:

cpp Copy
#include <stdio.h>
void displayString(char str[]);

int main()
{
    char name[50];
    printf("Enter string: ");
    fgets(name, sizeof(name), stdin);
    displayString(name);
    return 0;
}
void displayString(char str[])
{
    printf("String Output: ");
    puts(str);
}

Kết quả

Enter string: Kungfutech Academy
String Output: Kungfutech Academy

Tại đây chúng ta truyền một chuỗi name vào hàm displayString().

cpp Copy
displayString(name);

Chuỗi và con

Ví dụ:

cpp Copy
#include <stdio.h>

int main(void) {
  char name[] = "Kungfutech Academy";

  printf("%c", *name);
  printf("%c", *(name+4));
  printf("%c", *(name+8));

  char *namePtr;
  printf("\n");

  namePtr = name;
  printf("%c", *namePtr);
  printf("%c", *(namePtr+4));
  printf("%c", *(namePtr+8));
}

Kết quả

Kfc
Kfc

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào