hơ cậu chú ý cái kí tự kết thúc chuỗi nữa . '\n' gì đó thì phải >
Các bạn xem giùm mình bài này nhé, sao hàm chèn chuỗi không chạy đươc nhỉ?
C++ Code:
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> #include <malloc.h> void noi_chuoi (char *s1, char *s2); void chen_chuoi (char *s1, char *s2, int vt); void main() { char *s1; char *s2; int vitri_chen; clrscr(); printf("\n Nhap chuoi s1 : "); fflush (stdin); gets(s1); printf("\n Nhap chuoi s2: "); fflush(stdin); gets(s2); noi_chuoi(s1,s2); printf("\n Chen s2 vao s1 tu vi tri thu may? "); scanf("%d",vitri_chen); chen_chuoi(s1,s2,vitri_chen); getch(); } void noi_chuoi (char *s1, char *s2) { char *s; int z1 = strlen(s1); int z2 = strlen(s2); int z = z1 + z2; s=(char *)malloc(z*sizeof(char)); int i,j,k; for(i=0; i<z1; i++) *(s+i)=s1[i]; for(i=z1; i<z; i++) *(s+i)=s2[i-z1]; for(i=0; i<z; i++) printf("%c",*(s+i)); } void chen_chuoi (char *s1, char *s2, int vt) { char *s; int z1 = strlen(s1); int z2 = strlen(s2); int z=z1+z2; s=(char *)malloc(z*sizeof(char)); int i,j,k; for(i=0; i<vt; i++) *(s+i)=*(s1+i); for(i=vt; i<vt+z2; i++) *(s+i)=*(s2+i-vt); for(i=vt+z2; i<z; i++) *(s+i)=*(s1+i-z2); for(i=0; i<z; i++) printf("%c",*(s+i)); }
PS: Mình ko thấy chỗ post code, giúp mình với nhé! Thanks!
Vui lòng đọc Nội quy một lần để biết cách gửi code vào tag code.
Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 28-02-2008 lúc 11:18 PM. Lý do: nhắc nhở
hơ cậu chú ý cái kí tự kết thúc chuỗi nữa . '\n' gì đó thì phải >
Bạn nghĩ s2 có phần tử từ bao nhiêu nhỉ ?for(i=z1; i<z; i++)
*(s+i)=s2[i-z1];
Chưa cấp phát bộ nhớ thì lấy đâu ra mà chèn với cả nối T_T
Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.
Đọc kĩ mới thấy bác này thật tài tình, cái gì đây cậu 2, s1 và s2 có cái gì không đây ?char *s1; char *s2;
Về thuật toán thì chắc mình ko có rành nhưng mà hình như là chưa có "sổ đỏ" cho s1 , s2 thì phải . Bị công an phường kiểm tra lúc nào ko hay đó nghen , ko có giấy tờ là bị đuổi khỏi nhà đó ... ^_^
Code bug 1 đống coi lại cái hàm scanf vị trí chèn dùm, còn malloc thì hơi bị lạ
malloc, alloc là của thư viện #include <cstdlib>, sao có nhiều cậu cứ #include <malloc.h> thế không biết !C Code:
#include <cstdio> #include <cstring> #include <cstdlib> void appendString(char *s1, char *s2); void insertString(char *s1, char *s2, int position); int main() { char s1[10]; char s2[10]; int pos; appendString(s1, s2); insertString(s1, s2, pos); } void insertString(char *s1, char *s2, int pos) { int index = 0; for(; index != pos; ++s1){ pointer_to_char[index] = *s1; ++index; } for(; *s2 != '\0'; ++s2){ pointer_to_char[index] = *s2; ++index; } for(; *s1 != '\0'; ++s1){ pointer_to_char[index] = *s1; ++index; } pointer_to_char[_mLength] = '\0'; for(; *pointer_to_char != '\0'; ++pointer_to_char) } void appendString(char *s1, char *s2) { int index = 0; for(; *s1 != '\0'; ++s1){ pointer_to_char[index] = *s1; ++index; } for(; *s2 != '\0'; ++s2){ pointer_to_char[index] = *s2; ++index; } pointer_to_char[_mLength] = '\0'; for(; *pointer_to_char != '\0'; ++pointer_to_char) }
To rox_rook Trong C thì malloc nằm trong tệp header là alloc.h mà, mình dùng Borland C.
Bài này khi mình cắt đoạn chèn chuỗi cho chạy riêng trong hàm main thì vẫn chạy ok, chỉ có truyền qua hàm thì ko chạy đc!
Cảm ơn rox_rook đã code lại cho mình, nhưng mình chỉ muốn các bạn chỉ lại cụ thể chỗ sai trong code của mình cho mình sửa thôi, chứ mình thấy khai báo vậy là đủ rồi, thuật toán thì chưa bàn đến vội, nhưng vấn đề là ko chạy dc chứ ko phải chạy sai, chỉ cần biết sao ko chạy dc thì mình sẽ sửa lại thuật toán sau.
cái dòng s=(char *)malloc(z*sizeof(char)); để làm gì đấy bạn, mình mới học c thôi...chưa hiểu lắm
Thôi cái này tuỳ mọi người vậy, tại ghét cái kiểu main() lẻ loi của borland, với lại bộ Text-Editor của nó cũng rất phò T_T. Mà thôi vấn đề quan điểm không nên tranh cãi làm gì. Nhưng quả thật gcc xài rất tuyệt vời.
Vì thằng mallloc trả về kiểu void (char *) -> cast ( ép kiểu ), cái này xưa rùi, rõ ràng thì dùng static_cast<char *>(...)Code:s=(char *)malloc(z*sizeof(char));
malloc là cấp phát cho thằng z mỗi thằng 1 sizeof(char) x số phần tử. Hiểu rùi chứ gì!