/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 7 - Chuỗi (String) Trong C - P1

MỤC TIÊU:
Sau bài thực hành, các bạn có khả năng thực hiện được:
  • Biết sử dụng chuỗi trong lập trình
  • Biết sử dụng các hàm xử lý chuỗi


LÝ THUYẾT:

Tên Hàm Ý Nghĩa Ví Dụ Giải Thích
strlen Tính độ dài của chuỗi printf("%d", strlen("Tony Teo")); Kết quả là 8
strcat Nối chuỗi strcat (chuoi1, chuoi2); Kết quả trả về sẽ là nội dung của chuoi1 = chuoi1 + chuoi2
strrev Đảo ngược chuỗi strrev(chuoi) Ví dụ nội dung chuỗi là "12345" kết quả trả về sẽ là "54321"
strupr Ghi hoa chuỗi strupr(chuoi) Ví dụ nội dung chuỗi là "tony teo" kết quả trả về sẽ là "TONY TEO"
strlwr Ghi thường chuỗi strlwr(chuoi) Ví dụ nội dung chuỗi là "KU TEO" kết quả trả về sẽ là "ku teo"
strcpy Copy chuỗi strcpy(chuoi1, chuoi2); Sao chép nội dung của chuoi2 vào chuoi1
strcmp So sánh chuỗi strcmp(chuoi1, chuoi2); Hàm sẽ trả về các giá trị: bằng 0 nếu chuoi1 giống chuoi2, nhỏ hơn 0 chuoi1 nhỏ hơn chuoi2, lon hon 0 chuoi1 lớn hơn chuoi2
strstr Tìm kiếm chuỗi con trong một chuỗi cho trước strstr(chuoi1, chuoi2); Tìm chuoi2 trong chuoi1, nếu tìm thấy chuoi2 thì trả về chuỗi mới sẽ là từ trị trí tìm được đến đến chuoi1


Tính độ dài của chuỗi: kết quả trả về là 8
#include<stdio.h>
#include<string.h>
 
int main() { 
    char chuoi[20] = "Tony Teo";
    printf("Do dai chuoi: %d",strlen(chuoi));
}
Nối chuỗi: Kết quả là Hello Tony Teo!
#include<stdio.h>
#include<string.h>
 
int main() { 
    char  chuoi1 [50] = "Hello ";
    char  chuoi2 [50] = "Tony Teo!";
    strcat (chuoi1, chuoi2);
    printf ( "Noi chuoi2 vao chuoi1: %s", chuoi1);
}
Đảo ngược chuỗi: kết quả là 54321
#include<stdio.h>
#include<string.h>
 
int main() { 
    char  chuoi [50] = "12345";
    printf("\nChuoi dao nguoc: %s", strrev(chuoi));
}
Ghi hoa chuỗi: kết quả TONY TEO
#include<stdio.h>
#include<string.h>
 
int main() { 
    char  chuoi [50] = "tony teo";
    printf("\nChuoi ghi hoa: %s", strupr(chuoi));
}
Ghi thường chuỗi: kết quả là ku teo
#include<stdio.h>
#include<string.h>
 
int main() { 
    char  chuoi [50] = "KU TEO";
    printf("\nChuoi ghi thuong: %s", strlwr(chuoi));
}
So sánh chuỗi
#include<stdio.h>
#include <string.h>
 
int main() {    
  char chuoi1[20], chuoi2[20];    
  
  printf("Nhap chuoi 1: "); gets(chuoi1); 
  printf("Nhap chuoi 2: "); gets(chuoi2);
  
  if (strcmp(chuoi1, chuoi2) == 0) {
  		printf("2 chuoi bang nhau.");
  } else if (strcmp(chuoi1, chuoi2) < 0) {
   		printf("Chuoi 1 NHO hon chuoi 2");
  } else {
   		printf("Chuoi 1 LON hon chuoi 2");
  }
}
Copy chuỗi: kết quả là KU TEO
#include<stdio.h>
#include<string.h>
 
int main() { 
    char  chuoi1 [50];
    char  chuoi2 [50] = "KU TEO";
    strcpy(chuoi1, chuoi2); // copy chuoi2 vào chuoi1
    printf("\nChuoi moi la: %s", chuoi1);
}
Tìm kiếm chuỗi: kết quả trả về là "Teo hoc lap trinh"
#include<stdio.h>
#include <string.h>
 
int main() {    
  char chuoi1[50] = "Tony Teo hoc lap trinh";
  char chuoi2[50] = "Teo";   
  char *chuoiCon;
  chuoiCon = strstr(chuoi1, chuoi2);
  printf ("\nChuoi con la: %s", chuoiCon);
}

Áp dụng tìm kiếm chuỗi: kết quả Tim thay vì chữ "Teo" có xuất hiện trong chuoi1
#include<stdio.h>
#include <string.h>
 
int main() {    
  	char chuoi1[50] = "Tony Teo hoc lap trinh";
  	char chuoi2[50] = "Teo";   
 	if (strstr(chuoi1, chuoi2) != NULL) printf("Tim thay");
 	else printf("KHONG tim thay");
}


YÊU CẦU:

BÀI 1: XÂY DỰNG CHƯƠNG TRÌNH ĐẾM NGUYÊN ÂM VÀ PHỤ ÂM CỦA 1 CHUỖI
Input: nhập vào 1 chuỗi
Output: Số lượng nguyên âm và phụ âm trong chuỗi
Biết rằng: Nguyên âm gồm: a, e, i, o, u


BÀI 2: XÂY DỰNG CHƯƠNG TRÌNH ĐĂNG NHẬP BẰNG USERNAME VÀ PASSWORD
Input: Nhập vào username và password
Output: Đăng nhập thành công hay không thành công

BÀI 3: XÂY DỰNG CHƯƠNG TRÌNH SẮP XẾP CHUỖI THEO CHỮ CÁI
Input: Nhập 5 chuỗi bất kỳ
Output: Thứ tự các chuỗi đã được sắp xếp



THỰC HIỆN:

BÀI 1: XÂY DỰNG CHƯƠNG TRÌNH ĐẾM NGUYÊN ÂM VÀ PHỤ ÂM CỦA 1 CHUỖI
Input: nhập vào 1 chuỗi
Output: Số lượng nguyên âm và phụ âm trong chuỗi
Biết rằng: Nguyên âm gồm: a, e, i, o, u
code: đếm nguyên âm phụ âm, nhưng cho kết quả sai phần phụ âm, không đếm được chữ in hoa
#include<stdio.h>
// đếm nguyên âm phụ âm, nhưng cho kết quả sai phần phụ âm, không đếm được chữ in hoa
int main(){
	char s[100];
	printf("\nNhap chuoi: ");
	scanf("%[^\n]s", &s);
//	gets(s);
	
	int nguyenAm = 0;
	int phuAm = 0;
	int i = 0;
	while (s[i]){
		if (s[i] == 'u' || s[i] == 'e' || s[i] == 'o' || s[i] == 'a' || s[i] == 'i'){
			nguyenAm ++;
		} else {
			phuAm ++;	// có nghĩa là không phải nguyên âm là đếm
		}i++;
	}
	printf("\nChuoi [%s] co '%d' nguyen am, va '%d' phu am!", s, nguyenAm, phuAm);
}

code đúng:
#include<stdio.h>
#include<string.h>
char inThuongKyTu(char c){
	if (c >= 'A' && c <= 'Z') c += 32;
	return c;
}

char* inThuongChuoi(char s[]){
	int i = 0;
	while (s[i] != '\0'){
		s[i] = inThuongKyTu(s[i]);
		i++;
	}
	return s;
}

char inHoaKyTu(char c){
	if (c >= 'a' && c <= 'z') c -= 32;
	return c;
}

char* inHoaChuoi(char s[]){
	int i = 0;
	while (s[i] != '\0'){
		s[i] = inHoaKyTu(s[i]);
		i++;
	}
	return s;
}

int main(){
	char s[100], chuoi[100];
	printf("\nNhap chuoi: ");
	scanf("%[^\n]s", &chuoi);
//	gets(s);
		
	int nguyenAm = 0;
	int phuAm = 0;
	int i = 0;
	
	// strcpy(s, strlwr(chuoi)); // gán chuỗi vừa nhập vào chuỗi s
    strcpy(s, inThuongChuoi(chuoi));
	while (s[i]){
		if (isalpha(s[i])){ // nếu là chữ cái thì làm
			if (s[i] == 'u' || s[i] == 'e' || s[i] == 'o' || s[i] == 'a' || s[i] == 'i'){
			
				nguyenAm ++;
			} else {
				phuAm ++;	
			}
		}i++;	
	}
	printf("\nChuoi [%s] co '%d' nguyen am, va '%d' phu am!", s, nguyenAm, phuAm);
}


Cách viết khác, cách viết dùng con trỏ
Đếm nguyên âm
#include<stdio.h>

int demNguyenAm(char chuoi[]){
int dem = 0;
 int i = 0;
 while(chuoi[i]){
// 	chuoi[i] = tolower(chuoi[i]);
	chuoi[i] = strlwr(chuoi[i]);
 	if ((chuoi[i] == 'a') || (chuoi[i] == 'i') || (chuoi[i] == 'e') || (chuoi[i] == 'o') || (chuoi[i] == 'e') )  {
 		dem = dem + 1;
	 }
 	i++;
 }
 return dem;
}


int demNguyenAm_tro(char *chuoi){
int dem = 0;
 int i = 0;
 while(chuoi[i]){
 	// 	chuoi[i] = tolower(chuoi[i]);
 	chuoi[i] = tolower(chuoi[i]);
 	if ((chuoi[i] == 'a') || (chuoi[i] == 'i') || (chuoi[i] == 'e') || (chuoi[i] == 'o') || (chuoi[i] == 'e') )  {
 		dem = dem + 1;
	 }
 	i++;
 }
 return dem;
}

int main()
{	
 char chuoi[100];
 printf("\Nhap vao CHUOI: ");
 gets(chuoi);
 

 
 printf("Co [%d] nguyen am.", demNguyenAm_tro(chuoi));
}


Đếm nguyên âm và phụ âm
#include<stdio.h>
// dem PHU AM

int demNguyenAm_tro(char *chuoi){
int dem = 0;
 int i = 0;
 while(chuoi[i]){
 	char c = tolower(chuoi[i]);
 	if ((c == 'a') || (c == 'i') || (c == 'e') || (c == 'o') || (c == 'e') )  {
 		dem = dem + 1;
	}
 	i++;
 }
 return dem;
}

void demNguyenPhuAm_tro(char *chuoi, int *demNA, int *demPA){
	*demNA = 0;
	*demPA = 0;
	int i = 0;
	while(chuoi[i]){
	 	char c = tolower(chuoi[i]);
	 	if (isalpha(c)){ // la chu cai
		 	if ((c == 'a') || (c == 'i') || (c == 'e') || (c == 'o') || (c == 'e') )  {
		 		*demNA = *demNA + 1;
			}
			else {
				*demPA = *demPA + 1;
			}	 		
		 }

	 	i++;
	}

}


int main()
{	
 char chuoi[100];
 printf("\Nhap vao CHUOI: ");
 gets(chuoi);
 int demNA, demPA;

	demNguyenPhuAm_tro(chuoi, &demNA,&demPA);
 printf ("Co %d NGUYEN am va co %d PHU am", demNA, demPA);
// printf("Co [%d] nguyen am.", demNguyenAm_tro(chuoi));
}



BÀI 2: XÂY DỰNG CHƯƠNG TRÌNH ĐĂNG NHẬP BẰNG USERNAME VÀ PASSWORD
Input: Nhập vào username và password
Output: Đăng nhập thành công hay không thành công
code:
#include<stdio.h>
#include<string.h>

int main(){
	char user[100], pass[100];
	char userSys[] = "admin";
	char passSys[] = "admin@123";

	printf ("\nNhap vao user: "); gets(user);fflush(stdin);
	printf ("\nNhap vao pass: "); gets(pass);
	if (strcmp(user,userSys) == 0 && strcmp(pass, passSys) == 0) 
		printf("\nDang nhap thanh cong");
	else printf("\nThat bai");
}

BÀI 3:  XÂY DỰNG CHƯƠNG TRÌNH SẮP XẾP CHUỖI THEO CHỮ CÁI
Input: Nhập 5 chuỗi bất kỳ
Output: Thứ tự các chuỗi đã được sắp xếp
code:
#include<stdio.h>
#include<string.h>

void nhapChuoi(char s[][100], int n){
	int i;
	for (i = 0; i < n; i ++){
		printf("\nNhap chuoi %d: ", i + 1);
		fflush(stdin);
		gets(s[i]);
	}	
}

void xuatChuoi(char s[][100], int n){
	int i;
	for (i = 0; i < n; i ++){
		printf("\n%s", s[i]);
	}
}

void sapXep(char s[][100], int n){
	int i, j;
	for (i = 0; i < n-1; i++){
		for (j = i + 1; j < n; j++){
			if (strcmp(s[i],s[j]) > 0){
				char temp[100];
				strcpy(temp, s[j]);
				strcpy(s[j], s[i]);
				strcpy(s[i], temp);
			}
		}
	}
}

int main(){
	char s[100][100];
	nhapChuoi(s, 5);
	sapXep(s, 5);
	xuatChuoi(s, 5);	
}


Xong!

No comments:

Post a Comment

/*header slide*/