30/09/2018, 16:12
Cho hỏi về một số thao tác trên chuỗi
ý tưởng bài này của mình trong hàm so sánh tên của 2 người (để chút nữa xắp xắp theo thứ tự ABC)
mọi người góp ý với, mới tiếp xúc với chuỗi nên không biết dùng hàm đúng chưa
xem giùm mình đoạn code sau với:
int sosanhID(char *a,char *b)
{
char *tena;
char *tenb;
char *tam1,*tam2;
char *dem1,*dem2;
do
{
dem1=NULL;// khởi tạo cho nó là chuỗi trắng
dem2=NULL;
tam1=strtok(a," ");
tena=tam1;
while ((tam1=strtok(NULL," "))!=NULL)
{
dem1=strcat(dem1," ");
dem1=strcat(dem1,tena);// dem1 sẽ ghép từng từ được cắt ra từ a
tena=tam1;
} //tới đây thì dem1 sẽ chứa họ và tên lót ,không có tên
strcpy(a,dem1);//gán lại cho chuỗi a chỉ gồm họ và tên lót
tam2=strtok(b," ");
tanb=tam2;
while ((tam2=strtok(NULL," "))!=NULL)
{
dem2=strcat(dem2," ");
dem2=strcat(dem2,tenb);
tenb=tam2;
}
strcpy(b,dem2);
}
while (strcmp(tena,tenb)==0); //nếu như tên giống nhau thì quay lại kiểm tra
if (strcmp(tena,tenb)>0)
return 1;
return 0;
}
mọi người cho mình hỏi luôn là cách xóa trắng của mình có ổn không
gán ‘/0’ vào chữ cuối cùng thì strlen của chuỗi không giảm tại sao
/0 với NULL khác nhau thế nào?
mong mọi người giúp mình
Bài liên quan
Nhìn code của bạn vẽ hơi rối, mình đọc cũng chưa hiểu lắm, nhưng có vài góp ý như sau
dem1 và dem2 chưa cấp phát vùng nhớ, như vậy khả năng truy cập vùng nhớ bậy bạ là rất cao
hàm sosanhID của bạn chỉ là so sánh 2 tên với nhau, bạn làm hành động ở trên như vậy là thay đổi luôn giá trị của biến truyền vào, nếu bạn muốn thay đổi thì làm một cách minh bạch hơn xíu
Mình xin chỉ bạn một cách so sánh 2 tên tạm thời sử dụng được khi còn đi học
Ví dụ mình có 2 tên Nguyễn Văn Anh, Trần Văn Bê
Để xem cái nào đứng trước thì bạn lộn ngược 2 tên lại thành
Anh Văn Nguyễn và Bê Văn Trần
Rồi dùng strcmp là biết ai lớn hơn
gán ‘/0’ vào chữ cuối cùng thì strlen của chuỗi không giảm tại sao , mình không hiểu câu hỏi này, có liên quan gì trong sourre không
/0 với NULL khác nhau thế nào? ‘\0’ với NULL có thể gọi là giống nhau trong chuỗi, 2 giá trị đó đều là 0
có thể bạn nhầm ‘/0’ với ‘\0’ chăng ? 2 cái này khác nhau nghen
Lời khuyên cho những ai muốn tập tành viết code:
Suy nghĩ thật đơn giản và code thật đơn giản
Đừng nên suy nghĩ cao siêu, xa xôi rồi viết thành một nùi, gây ra nhiều thất bại
Viết đơn giản, chạy được là xong công việc đầu tiên, còn công việc optimize là một công việc khác
Công việc code với công việc optimize hoàn toàn là 2 công việc, đừng nên nhập chung 2 cái cùng một lúc là tự bóp ‘rái’ chính mình nhen, hehe
Regards,
thanks, tại mình lần đầu thao tác với chuỗi nên hơi lộn xộn