Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    11

    Angry Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?

    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:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <ctype.h>
    5. #include <malloc.h>
    6.  
    7. void noi_chuoi (char *s1, char *s2);
    8. void chen_chuoi (char *s1, char *s2, int vt);
    9.  
    10. void main()
    11. {
    12.     char *s1; char *s2;
    13.     int vitri_chen;
    14.     clrscr();
    15.  
    16.     printf("\n Nhap chuoi s1 : ");
    17.     fflush (stdin);
    18.     gets(s1);
    19.     printf("\n Nhap chuoi s2: ");
    20.     fflush(stdin);
    21.     gets(s2);
    22.     noi_chuoi(s1,s2);
    23.     printf("\n Chen s2 vao s1 tu vi tri thu may? ");
    24.     scanf("%d",vitri_chen);
    25.     chen_chuoi(s1,s2,vitri_chen);
    26.  
    27.     getch();
    28. }
    29.  
    30. void noi_chuoi (char *s1, char *s2)
    31. {
    32.     char *s;
    33.     int z1 = strlen(s1);
    34.     int z2 = strlen(s2);
    35.     int z = z1 + z2;
    36.     s=(char *)malloc(z*sizeof(char));
    37.     int i,j,k;
    38.     for(i=0; i<z1; i++)
    39.             *(s+i)=s1[i];
    40.     for(i=z1; i<z; i++)
    41.             *(s+i)=s2[i-z1];
    42.     for(i=0; i<z; i++)
    43.     printf("%c",*(s+i));
    44. }
    45. void chen_chuoi (char *s1, char *s2, int vt)
    46. {
    47.     char *s;
    48.     int z1 = strlen(s1);
    49.     int z2 = strlen(s2);
    50.     int z=z1+z2;
    51.     s=(char *)malloc(z*sizeof(char));
    52.     int i,j,k;
    53.     for(i=0; i<vt; i++)
    54.         *(s+i)=*(s1+i);
    55.     for(i=vt; i<vt+z2; i++)
    56.         *(s+i)=*(s2+i-vt);
    57.     for(i=vt+z2; i<z; i++)
    58.         *(s+i)=*(s1+i-z2);
    59.     for(i=0; i<z; i++)
    60.         printf("%c",*(s+i));
    61. }

    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ở

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    hơ cậu chú ý cái kí tự kết thúc chuỗi nữa . '\n' gì đó thì phải >

  3. #3
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    for(i=z1; i<z; i++)
    *(s+i)=s2[i-z1];
    Bạn nghĩ s2 có phần tử từ bao nhiêu nhỉ ?

  4. #4
    Ngày gia nhập
    10 2006
    Bài viết
    107

    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.

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    char *s1; char *s2;
    Đọ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 ?

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?

    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à đó ... ^_^

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    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ạ

    C Code:
    1. #include <cstdio>
    2. #include <cstring>
    3. #include <cstdlib>
    4.  
    5. void appendString(char *s1, char *s2);
    6. void insertString(char *s1, char *s2, int position);
    7.  
    8. int main()
    9. {
    10.   char s1[10]; char s2[10];
    11.   int pos;
    12.   printf("\n Nhap chuoi s1 : ");
    13.   fflush (stdin);
    14.   gets(s1);
    15.   printf("\n Nhap chuoi s2: ");
    16.   fflush(stdin);
    17.   gets(s2);
    18.   appendString(s1, s2);
    19.  
    20.   printf("\n Enter position :");
    21.   scanf("%d", &pos);
    22.   insertString(s1, s2, pos);
    23. }
    24.  
    25.  
    26. void insertString(char *s1, char *s2, int pos)
    27. {
    28.   int _mLength = strlen(s1) + strlen(s2);
    29.   char *pointer_to_char = static_cast<char* >(calloc(_mLength, sizeof(char)));
    30.    
    31.   int index = 0;
    32.   for(; index != pos; ++s1){
    33.     pointer_to_char[index] = *s1;
    34.     ++index;
    35.   }
    36.   for(; *s2 != '\0'; ++s2){
    37.     pointer_to_char[index] = *s2;
    38.     ++index;
    39.   }
    40.   for(; *s1 != '\0'; ++s1){
    41.      pointer_to_char[index] = *s1;
    42.     ++index;
    43.   }
    44.  
    45.   pointer_to_char[_mLength] = '\0';
    46.   for(; *pointer_to_char != '\0'; ++pointer_to_char)
    47.     printf("%c", *pointer_to_char);
    48.  
    49.   printf("\n");
    50. }
    51.  
    52.  
    53. void appendString(char *s1, char *s2)
    54. {
    55.   int _mLength = strlen(s1) + strlen(s2);
    56.   char *pointer_to_char = static_cast<char* >(calloc(_mLength, sizeof(char)));
    57.  
    58.   int index = 0;
    59.   for(; *s1 != '\0'; ++s1){
    60.     pointer_to_char[index] = *s1;
    61.     ++index;
    62.   }
    63.    
    64.   for(; *s2 != '\0'; ++s2){
    65.     pointer_to_char[index] = *s2;
    66.     ++index;
    67.   }
    68.  
    69.   pointer_to_char[_mLength] = '\0';
    70.   for(; *pointer_to_char != '\0'; ++pointer_to_char)
    71.     printf("%c", *pointer_to_char);
    72.  
    73.   printf("\n");
    74. }
    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 !

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    11

    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.

  9. #9
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    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

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    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.
    Code:
    s=(char *)malloc(z*sizeof(char));
    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 *>(...)
    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ì !

Các đề tài tương tự

  1. Bài tập C++ lại một bài chuỗi nữa,minh vẫn code sai híc,không chạy được
    Gửi bởi thienthanoze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 18
    Bài viết cuối: 13-07-2012, 08:21 AM
  2. code tìm chuỗi con trong chuỗi lớn bị lỗi khó hiểu..mọi người giúp mình vơi
    Gửi bởi giophieulang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 30-05-2012, 10:35 AM
  3. thay thế chuỗi con thứ i trong chuỗi mẹ bằng 1 chuỗi khác
    Gửi bởi nhat1811 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 06-08-2011, 08:25 AM
  4. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  5. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn