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 |
- strlen
- strcat
- strrev
- strupr
- strlwr
- strcmp
- strcpy
- strstr
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
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
Xong!
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
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);
}