Nhap 2 xâu so sánh 2 xâu đó C

So sánh chuỗi trong C – strcmp

Tháng Một 19, 2018 nguyenvanquan7826 Liên quan TUT C 1 response

Nội dung

  • 1. Hàm strcmp trong string.h
  • 2. Nguyên tắc so sánh

Ví dụ hàm strcmp[] trong C

#include #include int main[] { char str1[20], str2[20]; printf["Nhap chuoi 1: "]; gets[str1]; printf["Nhap chuoi 2: "]; gets[str2]; if [strcmp[str1, str2] == 0] { printf["2 chuoi bang nhau."]; } else if [strcmp[str1, str2] > 0] { printf["Chuoi 1 lon hon chuoi 2"]; } else { printf["Chuoi 1 nho hon chuoi 2"]; } return 0; }

Kết quả:

Nhap chuoi 1: HelloC Nhap chuoi 2: HelloC++ Chuoi 1 nho hon chuoi 2
Hàm strcat[] - Nối 2 chuỗi trong C
Hàm strrev[] - Đảo ngược chuỗi trong C

Bài tập C: So sánh hai chuỗi trong C

Đề bài: Viết chương trình C để sa sánh hai chuỗi.

Yêu cầu bài tập C này là so sánh xem hai chuỗi có đồng nhất [giống nhau] hay không. Để giải bài tập C này bạn cần sử dụng vòng lặp để duyệt qua tất cả các ký tự của hai chuỗi và kiểm tra từng ký tự tương ứng với chỉ mục có giống nhau không.


So sánh chuỗi nhập vào với chuỗi có sẵn

programming
c
c++
MuMot [Nguyễn Minh Trí] January 19, 2016, 3:57am #1
#include #include int main[]{ char mangkitu[]=""; printf["nhap chuoi: "]; gets[mangkitu]; if[mangkitu=="dnh"] printf["YES"]; else printf["NO"]; getch[]; return 0; }

khi nhập vào dnh thì mangkitu[] sẽ có 4 phần tử [cộng thêm kí tự kết thúc chuỗi ‘\0’]. vậy mình phải so sánh như thế để điều kiện if đúng và in ra YES

JuniorK [Khôi Trần] January 19, 2016, 4:04am #2

Thứ nhất tự giác gg, hay đơn giản trong bất kì quyển giáo trình nào cũng nhắc đến hàm strcmp
Thứ hai có thể tự viết hàm này bằng cách so sánh lấn lượt từng kí tự của 2 xâu

2 Likes
vietha0996 [Ha] January 19, 2016, 4:46am #3

So sánh 2 chuỗi thì dùng hàm strcmp còn so sánh các kí tự trong 2 chuỗi thì dùng hàm strncmp nhé.


//www.cplusplus.com/reference/cstring/strcmp/
//www.cplusplus.com/reference/cstring/strncmp/

2 Likes
MuMot [Nguyễn Minh Trí] January 19, 2016, 5:42am #4
JuniorK:

Thứ nhất tự giác gg, hay đơn giản trong bất kì quyển giáo trình nào cũng nhắc đến hàm strcmpThứ hai có thể tự viết hàm này bằng cách so sánh lấn lượt từng kí tự của 2 xâu

vietha1996:

So sánh 2 chuỗi thì dùng hàm strcmp còn so sánh các kí tự trong 2 chuỗi thì dùng hàm strncmp nhé.

char mangkitu[]=""; printf["nhap chuoi: "]; gets[mangkitu]; if[strcmp[mangkitu,"dnh"]==0] printf["YES"]; else printf["NO"];

nếu dùng hàm xử lý chuỗi thì dễ rồi, ý mình hỏi là có cách nào để so sánh trực tiếp 2 chuỗi với nhau bằng phép toán == được k?
chuỗi nhập vào sẽ có thêm kí tự ‘\0’ nhưng mình thêm kí tự ‘\0’ vào chuỗi có sẵn mà sao nó vẫn trả về kết quả sai

#include #include int main[]{ char mangkitu[]=""; printf["nhap chuoi: "]; gets[mangkitu]; if[mangkitu==["dnh"+'\0']] printf["YES"]; else printf["NO"]; getch[]; return 0; }
vietha0996 [Ha] January 19, 2016, 5:47am #5

Phép so sánh == không dùng để so sánh nội dung của 2 chuỗi được.

Câu hỏi và giải đáp của bạn đều có ở đây nhé.


//diendan.congdongcviet.com/threads/t50872::2-chuoi-giong-nhau-nhung-lai-ko-bang-nhau-khi-so-sanh.cpp

2 Likes
MuMot [Nguyễn Minh Trí] January 19, 2016, 5:54am #6

oh! mình hiểu rồi, cám ơn bạn nhiều!

Pham_Van_Hai [Pham Van Hai] January 19, 2016, 5:54am #7
MuMot:

char mangkitu[]="";

Góp ý với bạn là đoạn trên không hợp lệ về mặt logic. Theo mình hiểu bạn định khai báo cách đó để áp ụng cho nhập xâu tùy ý. Nhưng về mặt logic là sai vì sau câu lệnh đó mangkitu chỉ có kích thước là 1 [chứa ký tự \0]. Bạn phải khai báo kích thước của mangkitu hoặc dùng cấp phát động.

MuMot [Nguyễn Minh Trí] January 19, 2016, 6:22am #8

mình xem video của anh @ltd thì chỉ thấy cách khai báo kích thước mangkitu hoặc dùng cấp phát động theo như bạn nói, mà sao khi khai báo char mangkitu[]= ""; thì chương trình vẫn chạy đúng, mình cũng thắc mắc lâu lắm rồi mà chưa giải đáp được, sẵn tiện bạn biết thì bỏ chút thời gian giải thích giúp mình được k? mình cảm ơn nhiều

Pham_Van_Hai [Pham Van Hai] January 19, 2016, 6:59am #9
  • Bộ nhớ của máy tính được tổ chức theo các ô nhớ liên tiếp nhau. Khi bạn khai báo một mảng có kích thước n thì nó sẽ cấp phát cho bạn n * [kích thước của từng kiểu dữ liệu, ví dụ: char - kích thước 1 byte, short int - kích thước 2 byte]. Nhưng bạn có vẫn dùng được array[n+1] nếu như vùng nhớ đó free, không bị chương trình nào dùng. C không quan tầm và không check kích thước của mảng. Mà lập trình viên phải làm điều đó.
  • Trong trường hợp của bạn mảng mangkitu chỉ có 1 byte nhưng tại sao bạn vẫn dùng được là vì có thể vùng nhớ lân cận mangkyti vẫn đang free, không có chương trình nào dùng cả, nhưng nếu có chương nào đang dùng thì chương trình của bạn sẽ bị lỗi ngay [chỉ xảy ra khi chạy chương trình] và đây gọi là lỗi run-time.
1 Like

Video liên quan

Chủ Đề