Chuỗi trong lập trình C

81
Chuỗi trong lập trình C

Mục tiêu bài học

  • Giải thích biến và hằng chuỗi.
  • Giải thích con trỏ đến chuỗi.
  • Thực hiện các thao tác nhập/xuất chuỗi.
  • Giải thích các hàm thao tác chuỗi.
  • Giải thích cách thức truyền mảng vào hàm.
  • Mô tả cách thức sử dụng chuỗi như các đối số của hàm.

Các Biến Chuỗi

  • Chuỗi là mảng ký tự kết thúc bởi ký tự null (‘\0’).
  • Có thể gán các hằng chuỗi cho các biến chuỗi.
  • Hằng chuỗi là một chuỗi các ký tự nằm trong dấu nháy kép.
  • Ký tự null ‘\0’ được tự động thêm vào biểu diễn bên trong của chuỗi.
  • Khi khai báo một biến chuỗi, hãy dành thêm một phần tử trống cho ký tự kết thúc.

Khai Báo Biến Chuỗi

  • Khai báo một biến chuỗi tiêu biểu:
char str[10];
  • str là một biến mảng ký tự có thể lưu giữ tối đa 10 ký tự bao gồm cả ký tự kết thúc.

Các thao tác Nhập/Xuất chuỗi

  • Sử dụng các hàm trong thư viện nhập/xuất chuẩn stdio.h để thực hiện các thao tác nhập/xuất chuỗi.
  • Hàm gets() là cách đơn giản nhất để nhập vào một chuỗi thông qua thiết bị nhập chuẩn.
  • Các ký tự được nhập vào cho đến khi ấn phím Enter
  • Hàm gets() thay thế ký tự sang dòng mới ‘\n’ bằng ký tự ‘\0’
  • Cú pháp:
gets(str);
  • Hàm puts() được dùng để hiển thị một chuỗi trên thiết bị xuất chuẩn.
  • Cú pháp :
puts(str);
  • Các hàm scanf() và printf() được sử dụng để nhập và hiển thị các kiểu dữ liệu hỗn hợp trong cùng một câu lệnh.
  • Cú pháp để nhập chuỗi:
scanf(“%s”, str);
  • Cú pháp để hiển thị chuỗi:
printf(“%s”, str);

Các hàm về chuỗi

Các hàm xử lý chuỗi nằm trong tập tin string.h. Một số thao tác được thực hiện bởi các hàm này là:

  • Ghép chuỗi
  • So sánh chuỗi
  • Xác định vị trị một ký tự trong chuỗi
  • Sao chép một chuỗi sang chuỗi khác
  • Tính chiều dài chuỗi

Hàm strcat()

  • Nối hai giá trị chuỗi vào một chuỗi.
  • Cú pháp:
strcat(str1, str2);
  • Nối str2 vào cuối chuỗi str1
  • Trả về str1

Hàm strcmp()

  • So sánh hai chuỗi và trả về một giá trị số nguyên dựa trên kết quả của sự so sánh.
  • Cú pháp:
strcmp(str1, str2);
  • Hàm trả về một giá trị:
    + Nhỏ hơn 0, nếu str1<str2
    + 0, nếu str1 giống str2
    + Lớn hơn 0, nếu str1>str2

Hàm strchr()

  • Xác định vị trí xuất hiện của một ký tự trong một chuỗi.
  • Cú pháp:
strchr(str, chr);
  • Hàm trả về:
    + con trỏ trỏ đến vị trí tìm được đầu tiên của ký tự (trỏ bởi chr) trong chuỗi str.
    + NULL nếu chr không có trong chuỗi

Hàm strcpy()

  • Sao chép giá trị trong một chuỗi vào một chuỗi khác.
  • Cú pháp:
strcpy(str1, str2);
  • Giá trị của str2 được chép vào str1
  • Hàm trả về str1

Hàm strlen()

  • Xác định chiều dài của chuỗi.
  • Cú pháp:
strlen(str);
  • Hàm trả về một giá trị nguyên là độ dài của str.

Truyền Mảng vào Hàm

  • Khi mảng được truyền vào hàm như một đối số, chỉ có địa chỉ của mảng được truyền.
  • Tên mảng chính là là địa chỉ của mảng.
void main() {
int ary[10];
…
fn_ary(ary);
…
}
#include<stdio.h>
void main() {
int num[5], ctr, sum=0;
int sum_arr(int num_arr[]);
/* Function declaration */
clrscr();
for(ctr=0;ctr<5;ctr++) {
/*Accepts numbers into the array */
printf("\nEnter number %d:",ctr+1);
scanf("%d", &num[ctr]);
}
sum=sum_arr(num);/*Invokes the function*/
printf("\nThe sum of the array is %d",sum);
getch();
}
int sum_arr(int num_arr[]){
/*Function definition*/
int i, total;
for(i=0,total=0;i<5;i++)
/* Calculates the sum */
total+=num_arr[i];
return total;
/* Returns the sum to main() */
}

Kết quả của chương trình trên:

Enter number 1: 5
Enter number 2: 10
Enter number 3: 13
Enter number 4: 26
Enter number 5: 21
The sum of the array is 75

Ví dụ Truyền Mảng vào Hàm

#include<stdio.h>
#include<string.h>
void main() {
char lines[5][20];
int ctr, longctr=0;
int longest(char lines_arr[][20]);
/* Function declaration */
clrscr();
for(ctr=0;ctr<5;ctr++) {
/*Accepts string values into the array*/
printf("\nEnter string %d:",ctr+1);
scanf("%s", lines[ctr]);
}
longctr=longest(lines);
/*Passes the array to the function*/
printf("\n The longest string is %s", lines[longctr]);
getch();
}
int longest(char lines_arr[][20]) {
/*Function definition*/
int i=0, l_ctr=0, prev_len, new_len;
prev_len=strlen(lines_arr[i]);
/*Determines the length of the first element*/
for(i++;i<5;i++) {

new_len=strlen(lines_arr[i]);

/* Determines the length of the next element */

if(new_len > prev_len) l_ctr=i;

/* Stores the subscript of the longer string */

prev_len=new_len;

}

return l_ctr;

/* Returns the subscript of the longest string */

}

Kết quả của chương trình trên:

Enter string 1: The
Enter string 2: Sigma
Enter string 3: Protocol
Enter string 4: Robert
Enter string 5: Ludlum
The longest string is Protocol