Lập trình C: Mảng chuỗi
Nếu bạn cần quản lý một số lượng chuỗi nào đó (ví dụ như quản lý sinh viên bao gồm có phần họ và tên, quê quán, ...) thì trong ngôn ngữ C bạn cần phải dùng đến mảng chuỗi. Bản chất của mảng chuỗi là mảng ký tự hai chiều với số hàng và số cột tương ứng, trong đó số hàng chính là số chuỗi bạn muốn có, còn số cột là kích thước tối đa của mỗi chuỗi.
Ta có thể khai báo một mảng chuỗi theo cú pháp như sau:
char Tên_mảng_chuỗi[Số_chuỗi] [Kích_thước_chuỗi];
Ví dụ sau đây khai báo mảng chuỗi có tên hoVaTen gồm 50 chuỗi, mỗi chuỗi có tối đa 30 ký tự.
char hoVaTen[50][30];
Nhập liệu cho mảng chuỗi
Dưới đây là một ví dụ thể hiện cách nhập liệu cho mảng chuỗi, trong đó vòng lặp for luôn là lựa chọn tốt nhất cho các thao tác với chuỗi:
#include<stdio.h> #include<string.h> main() { char hoVaTen[50][30]; int i, sochuoi; do { printf("\nMoi ban nhap so chuoi muon thao tac: "); //trước tiên yêu cầu nhập số chuỗi muốn thao tác scanf("%d",&sochuoi); }while(!(sochuoi>0 && sochuoi<=50)); //số chuỗi phải nằm trong đoạn [1,50] fflush(stdin); //sau đó cần phải tiến hành khử dữ liệu trong bộ đệm bàn phím vì còn tàn dư ký tự '\n' , hàm này thuộc thư viện <stdio.h> printf("\nMoi ban nhap cac chuoi:"); for (i=0; i<sochuoi; i++){ //rồi tiến hành do{ printf("\nChuoi thu %d: ",i+1); gets(hoVaTen[i]); //nhập từng chuỗi một. }while(strlen(hoVaTen[i])>30);//cần đảm bảo mỗi chuỗi nhập vào có kích thước không >30 } printf("\nSau khi nhap, ta duoc cac chuoi nhu sau:\n"); for (i=0; i<sochuoi; i++){ puts(hoVaTen[i]); } return 0; }
Tìm chuỗi có độ dài lớn nhất, nhỏ nhất của mảng chuỗi
Dưới đây là ví dụ hoàn chỉnh thể hiện một cách tìm độ dài Max, Min trong mảng chuỗi:
#include<stdio.h> #include<string.h> main() { char hoVaTen[50][30]; int i, sochuoi;//biến sochuoi để lưu số lượng chuỗi thực tế muốn thao tác int Max, Min; //khai báo hai biến này để lưu trữ độ dài lớn nhất, nhỏ nhất do { printf("\nMoi ban nhap so chuoi muon thao tac: "); scanf("%d",&sochuoi); }while(!(sochuoi>0 && sochuoi<=50)); fflush(stdin); printf("\nMoi ban nhap cac chuoi:"); for (i=0; i<sochuoi; i++){ do{ printf("\nChuoi thu %d: ",i+1); gets(hoVaTen[i]); }while(strlen(hoVaTen[i])>30); } Max = Min = strlen(hoVaTen[0]); for(i=1; i<sochuoi; i++) { //lấy từng chuỗi sau đó để so sánh //tìm độ dài Max if(Max<strlen(hoVaTen[i])) //nếu độ dài lớn hơn Max Max = strlen(hoVaTen[i]); //thì lưu vào Max (chu trình lặp lại với các chuỗi tiếp theo) //tìm độ dài Min if(Min>strlen(hoVaTen[i])) //nếu độ dài nhỏ hơn Min Min = strlen(hoVaTen[i]); //thì lưu vào Min } //in ra giá trị độ dài lớn nhất và nhỏ nhất trong biến Max và Min sau chu trình lặp printf("\nDo dai lon nhat va nho nhat trong cac chuoi la Max = %d, Min = %d", Max, Min); return 0; }
Một kết quả demo cho chương trình: