Bài toán chuỗi 3 ký tự phuông pháp sinh năm 2024

Bạn có thể khai báo mảng ký tự bằng cách gán một chuỗi ký tự được đặt trong dấu nháy kép hoặc liệt kê từng ký tự của chuỗi.

char c[] = "blog.28tech.com.vn"; char d[] = {'2', '8', 't', 'e', 'c', 'h'};

Ví dụ với chuỗi c[] = "28tech"

chuỗi ký tự

Ví dụ : Các cách khai báo mảng ký tự

include "stdio.h"

int main(){

char c[] = "blog.28tech.com.vn";  
char d[] = {'2', '8', 't', 'e', 'c', 'h', '\0'};  
char s[1000];   
char t[7] = {'2', '8', 't', 'e', 'c', 'h', '\0'};    
return 0;  
}


2. Nhập Xuất Chuỗi Ký Tự

Xuất Chuỗi Ký Tự Ra Màn Hình

Mảng ký tự trong C có đặc tả là "%s" nên bạn có thể sử dụng đặc tả này để in ra toàn bộ nội dung của xâu

Ví dụ 1: In xâu ký tự ra màn hình

include "stdio.h"

int main(){

char c[] = "blog.28tech.com.vn";  
char d[] = {'2', '8', 't', 'e', 'c', 'h', '\0'};  
char s[7] = {'2', '8', 't', 'e', 'c', 'h', '\0'};    
printf("%s\n", c);  
printf("%s\n", d);  
printf("%s\n", s);  
return 0;  
}

Output :

blog.28tech.com.vn 28tech 28tech

Bạn có thể duyệt qua từng ký tự của xâu ký tự thông qua chỉ số, vì nó cũng chỉ là mảng thông thường kiểu char

Để biết số lượng ký tự trong xâu ta sử dụng hàm strlen() trong thư viện string.h, chú ý ký tự null ở cuối xâu không được tính là một ký tự trong xâu khi sử dụng hàm strlen()

Ví dụ 2 : Duyệt qua ký tự trong xâu

include "stdio.h"

include "string.h"

int main(){

char c[1000] = "28tech !";  
printf("So luong ky tu trong xau : %d\n", strlen(c));  
for(int i = 0; i < strlen(c); i++){  
    printf("c[%d] = %c\n", i, c[i]);  
}  
printf("In chuoi lat nguoc : ");  
for(int i = strlen(c) - 1; i >= 0; i--){  
    printf("%c", c[i]);  
}  
return 0;  
}

Output :

So luong ky tu trong xau : 8 c[0] = 2 c[1] = 8 c[2] = t c[3] = e c[4] = c c[5] = h c[6] = c[7] = ! In chuoi lat nguoc : ! hcet82

Chú ý : Trong ví dụ trên mình khai báo mảng c[1000] thì 1000 ở đây là số lượng ký tự tối đa mà mảng c[] có thể lưu, còn khi sử dụng strlen() thì hàm này trả về số lượng ký tự thực sự mà mảng c[] lưu.

Nhập chuỗi ký tự từ bàn phím

Để nhập chuỗi ta chia ra làm 2 trường hợp, nhập chuỗi không có dấu cách và chuỗi có dấu cách.

Để nhập chuỗi không có dấu cách ta sử dụng hàm scanf với đặc tả "%s"

Nếu bạn cố tính nhập chuỗi có dấu cách thì hàm scanf chỉ nhập được từ đầu tiên cho tới khi gặp dấu cách.

Ví dụ 3 : Nhập chuỗi với scanf

include "stdio.h"

include "string.h"

int main(){

char c[1000];  
printf("Nhap xau ky tu : ");  
scanf("%s", c);   
printf("Xau ky tu vua nhap : %s\n", c);  
return 0;  
}

Để nhập chuỗi có dấu cách bạn có thể sử dụng : gets() hoặc fgets()

Nếu trình biên dịch C bạn sử dụng không dùng được gets() thì bạn sử dụng fgets()

Hai hàm này sẽ nhập hết nội dung trên 1 dòng cho tới khi gặp dấu xuống dòng (enter) thì mới dừng nhập.

Cú pháp gets : gets(c)

Ví dụ 4 : Nhập chuỗi với gets()

include "stdio.h"

include "string.h"

int main(){

char c[1000];  
printf("Nhap xau ky tu : ");  
gets(c);  
printf("Xau ky tu vua nhap : %s\n", c);  
return 0;  
}

Cú pháp fgets() : fgets(c, nums, stdin)

Trong đó :

  • c là mảng ký tự
  • nums là số lượng ký tự tối đa mà bạn muốn nhập
  • stdin là luồng vào từ bàn phím

Lưu ý khi sử dụng fgets() đó là hàm này sẽ nhập cả ký tự enter ở cuối dòng và coi đó là ký tự của xâu, vì thế nếu bạn không muốn ký tự enter này trong xâu của mình thì bạn cần thay nó bằng ký tự null.

Bạn có thể kiểm tra điều này bằng cách in ra mã ASCII của kí tự enter, kí tự enter có mã là 12.

Ví dụ 5 : Nhập chuỗi với fgets()

include "stdio.h"

include "string.h"

int main(){

char c[1000];  
printf("Nhap xau ky tu : ");  
fgets(c, 1000, stdin);  
printf("Chuoi ban dau : \n");  
printf("Xau ky tu vua nhap : %s", c);  
printf("So luong ky tu trong xau : %d\n", strlen(c));  
printf("Ki tu cuoi cung trong xau co ma ASCII : %d\n", c[strlen(c) - 1]);  
c[strlen(c) - 1] = '\0';  
printf("Chuoi sau khi xoa enter : \n");  
printf("Xau ky tu vua nhap : %s\n", c);  
printf("So luong ky tu trong xau : %d\n", strlen(c));  
printf("Ki tu cuoi cung trong xau co ma ASCII : %d\n", c[strlen(c) - 1]);  
return 0;  
}

Output :

Chuoi ban dau : Xau ky tu vua nhap : 28tech blog So luong ky tu trong xau : 12 Ki tu cuoi cung trong xau co ma ASCII : 10 Chuoi sau khi xoa enter : Xau ky tu vua nhap : 28tech blog So luong ky tu trong xau : 11 Ki tu cuoi cung trong xau co ma ASCII : 103


3. Xử Lý Trôi Lệnh

Khi nhập chuỗi ký tự có dấu cách bằng hàm gets() hoặc fgets() thì đôi khi bạn sẽ xảy ra trường hợp bạn chưa kịp nhập nội dung cho chuỗi thì câu lệnh đã được bỏ qua.

Xem xét ví dụ sau đây, bạn thử chạy ở máy của mình để thấy việc trôi lệnh

include "stdio.h"

int main(){

char c[] = "blog.28tech.com.vn";  
char d[] = {'2', '8', 't', 'e', 'c', 'h', '\0'};  
char s[1000];   
char t[7] = {'2', '8', 't', 'e', 'c', 'h', '\0'};    
return 0;  
}

0

Nguyên nhân xảy ra trôi lệnh : hàm gets() (hay fgets()) chỉ dừng nhập khi gặp kí tự xuống dòng, trong trường hợp này bạn nhập n bằng hàm scanf, hàm scanf này sẽ không xử lý ký tự xuống dòng sau khi bạn nhập n ở dòng thứ 1.

Khi hàm gets() đọc dữ liệu từ luồng vào sẽ gặp phải phím enter dư thừa này và nó sẽ dừng nhập vì bản chất nó gặp enter là dừng. Vì thế nội dung của mảng ký tự bạn định nhập chưa hề có ký tự nào mà câu lệnh gets() bị trôi qua luôn.

Nhìn chung nếu bạn sử dụng scanf trước gets sẽ xảy ra tình trạng này

Cách xử lý : Có nhiều cách xử lý tình trạng trôi lệnh, nhưng về bản chất thì ta cần loại bỏ phím enter dư thừa trước khi nhập chuỗi.

Cách 1 : Dùng hàm getchar() để đọc 1 ký tự từ bàn phím, hàm này sẽ đọc phím enter thừa.

include "stdio.h"

int main(){

char c[] = "blog.28tech.com.vn";  
char d[] = {'2', '8', 't', 'e', 'c', 'h', '\0'};  
char s[1000];   
char t[7] = {'2', '8', 't', 'e', 'c', 'h', '\0'};    
return 0;  
}

1

Cách 2 : Sử dụng câu lệnh scanf("\n")

Câu lệnh này sẽ bỏ qua mọi ký tự là dấu cách và enter cho tới khi bạn nhập kí tự khác dấu cách và enter, vì thế nếu bạn nhập số bằng scanf sau đó có dư thừa các dấu cách hoặc rất nhiều kí tự enter sau hàm scanf thì câu lệnh này sẽ giúp bạn loại bỏ toàn bộ