Viết hàm nối chuỗi

Dạ đề là viết hàm nối chuỗi mà không dùng các hàm có sẵn và bắt buộc phải dùng fgets
Em làm như sau nhưng không đúng hết test case. Mọi người xem giúp em sai ở đâu ạ

size_t str1=myStrlen(s1),str2=myStrlen(s2);
    if(kt) {
        int i,j;
        for(i=0;s1[i]!='\0';i++);
        for(j=0;s2[j]!='\0';j++)
            s1[i+j]=s2[j];
        s1[i+j]='\0';
        for(int z=0;z<str1;z++){
            if(s1[z]=='\n'){
                s1[z]=' ';
            }
        }
        cout<<s1;
        
    }
    else cout<<"Khong noi duoc. Khong du bo nho.";
    
}
int myStrlen(char s[]){
    int n = 0;
	while (s[n] != '\0')
		n++;
	return n;
}
bool myStrcat(char s1[MAX], char s2[MAX]){
    size_t str1=myStrlen(s1),str2=myStrlen(s2);
    bool ktra=true;
    if(255<(str1+str2+2)){
        ktra=false;
    }else{
        ktra=true;
    }
    return ktra;
}

Nối bằng khoảng trắng hay dính liền với nhau vậy bạn?
Cũng như lần trước, mình bảo là loại bỏ \n chứ không bảo là thay bằng khoảng trắng.

2 Likes

em ko nghĩ ra cách loại bỏ ạ

Xoá phần tử đó ra khỏi mảng kí tự là được

là mình cho nó = vt-1 hay sao a

Ví dụ bạn có một mảng, bạn muốn xoá phần tử nào đó mà không tạo ra khoảng trống thì bạn làm thế nào?
Ví dụ: 1 2 3 4 5 thành 1 2 4 5

đẩy phần tử phía sau lên ạ ?

Đúng rồi, loại bỏ \n cũng vậy thôi. Cách dài dòng nhất là đặt hai mảng liên tiếp nhau rồi loại \n như trên

Còn ngắn gọn hơn thì thử đoán xem. \n cũng chỉ là một phần tử trong một mảng.

2 Likes

em ko nghĩ ra a ạ, nãy h làm sai tùm lum

\0 là báo kết thúc chuỗi trong C.
Để \0 sau \n thì qua \n mới kết thúc.
Giờ muốn kết thúc ngay chỗ \n thì đạp \n ra, thế \0 vào.

3 Likes

là thay vì s1[z]=’ ’ thì s1[z]=’\0’ ạ ,nhưng như vậy thì ko nối đc ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?