Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 21 kết quả

Đề tài: code xử lý chuỗi ký tự nhập vào từ bàn phím trong C.

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    22

    Wink code xử lý chuỗi ký tự nhập vào từ bàn phím trong C.

    chương trình in ra từ đầu tiên của chuỗi ký tự nhập vào từ bàn phím ( bít các từ dc cách nhau bởi dấu space)
    C Code:
    1. /*chuong trinh in ra tu dau tien cua cua chuoi ky tu*/
    2. #include<stdio.h>
    3. #include<conio.h>
    4. main()
    5. {
    6. char *s,*p;
    7. int i,j;
    8. printf("nhap vao chuoi ky tu: ");gets(s);
    9. p[0]='\0';j=0;
    10. for(i=0;i<strlen(s);i++)
    11. {
    12. if (s[i]!=' ')p[i]=s[i];
    13. else
    14. {
    15. j=i;
    16. break;
    17. }
    18. }
    19. p[j+1]='\0';
    20. printf("tu dau tien cua chuoi %s la: %s",s,p);
    21. getch();
    22. }

    mình chạy nó ko ra kết quả như iu cầu
    còn nữa mình mún bổ sung thêm phần xóa bỏ các dấu space ở đầu chuỗi nhập vào( nếu có ) mà chưa bít dùng cách nào vậy các pro giúp với
    NO

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    bạn à. Mình tét thử thì chỉ thấy thiếu chưa gộp string.h vào thôi. và vài lỗi nhỏ :

    + nếu nhập abc nó sẽ trả về a.
    + nếu nhập bình thường thì sẽ bị thừa 1 dấu cách. (sửa lại thành ....else
    {
    j=i-1;
    break;
    })

    Còn nữa bạn có thể del kí tự đầu tiên bằng cách :

    while (kí tự đầu tiên là dấu cách) {xóa kí tự đầu tiên đi}

    (sr mình ko được quyền code hộ bạn)
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    Hi Hi lâu rồi không làm bài về cái chuỗi, cám ơn bạn thanhnam46 nhé.Nhờ bạn mà mình mới nhớ được bài này .
    Code này mình đã chỉnh lại cho bạn, cái đoạn bạn sử dụng con trỏ khi chưa khai báo mà không thấy máy báo vấn đề gì sao? Bình thường muốn sử dụng 1 con trỏ thì ta phải gán 1 ô nhớ cho nó hoặc cấp phát bộ nhớ trước khi sử dụng.Bạn nhớ điều này nhé.
    Còn đây là code mình đã test và không thấy vấn đề gì, nếu còn vướng mắc chỗ nào bạn cứ hỏi mình và mọi người sẽ cố gắng trả lời trong phạm vi có thể.
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. #include <alloc.h>
    5. main()
    6. {
    7. char *s,*p;
    8. int i,j;
    9.  
    10.     printf("nhap vao chuoi ky tu: ");
    11.     fflush(stdin);
    12.    s=(char*)malloc(sizeof(char));
    13.    p=(char*)malloc(sizeof(char));
    14.     gets(s);
    15.  
    16.     for(i=0; i < strlen(s);i++){
    17.  
    18.          if(s[i]!=' '){
    19.             p[i]=s[i];
    20.  
    21.          }
    22.  
    23.          else
    24.          {
    25.                     j=i;
    26.              break;
    27.  
    28.          }
    29.  
    30.       }
    31. p[j]= NULL;
    32. printf("tu dau tien cua chuoi %s la: %s",s,p);
    33. getch();
    34. }
    ttecak ?

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

    Where all your free() functions baby ? You silently created a sweet memory leak T_T !
    By the way, you can just simple write sthing like :
    C Code:
    1. #include <cstdio>
    2. #include <cstring>
    3.  
    4. int main(){
    5.   char str[40];
    6.   printf("A string please :\n");
    7.   gets(str);
    8.  
    9.   char* q = str;
    10.   printf("First word :\n");
    11.   for(;*q != ' '; ++q){
    12.     printf("%c", *q);
    13.   }
    14.   return 0;
    15. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 01-04-2008 lúc 11:39 AM.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    ? Có nhất thiết ko ?

    Đây là bài đơn giản . Comeonbaby lại dùng giao mổ trâu giết vịt rồi

    C Code:
    1.  
    2. /*chuong trinh in ra tu dau tien cua cua chuoi ky tu*/
    3. #include<stdio.h>
    4. #include<conio.h>
    5. #include<string.h>
    6. void main(void)
    7. {
    8. char *s,*p;
    9. int i,j;
    10. printf("nhap vao chuoi ky tu: ");gets(s);
    11. p[0]='\0';j=0;
    12. for(i=0;i<strlen(s);i++)
    13. {
    14. if (s[i]!=' ')p[i]=s[i];
    15. else
    16. {
    17. j=i-1;
    18. break;
    19. }
    20. }
    21. p[j+1]='\0';
    22. printf("tu dau tien cua chuoi %s la: %s",s,p);
    23. getch();
    24. }


    Chạy hoàn toàn đúng với BC3.01 (DOS) (chưa fix bug nhập abc thì nó in ra a)
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    Mặc định code xử lý chuỗi ký tự nhập vào từ bàn phím trong C.

    Code của langman mà chạy được đúng thì mình cũng thua.
    Code:
    nhap vao chuoi ky tu: abcde ewe
    Segmentation fault (core dumped)
    Đây là gcc message, tui cũng đã thử với Visual C tại trường, nó không thể nào chấp nhận kiểu này được, cả 2 con trỏ chưa hề cấp phát, làm sao có thể cho gets nhập vào kiểu đó được, cách làm của baby là chính xác trong trường hợp muốn nhập vào lúc runtime kiểu đó. Bắt buộc phải tạo mãng động hoặc dùng mãng fixed size.

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Code của langman mà chạy được đúng thì mình cũng thua.
    Code:
    nhap vao chuoi ky tu: abcde ewe
    Segmentation fault (core dumped)
    Đây là gcc message, tui cũng đã thử với Visual C tại trường, nó không thể nào chấp nhận kiểu này được, cả 2 con trỏ chưa hề cấp phát, làm sao có thể cho gets nhập vào kiểu đó được, cách làm của baby là chính xác trong trường hợp muốn nhập vào lúc runtime kiểu đó. Bắt buộc phải tạo mãng động hoặc dùng mãng fixed size.
    Sao R_R lại nói vậy ? R_R có nhìn thấy dòng dưới tôi ghi là chạy hoàn toàn đúng với BC 3.01 DOS ko ?

    Tôi tét trên BC 3.01 DOS chả có gì sai cả
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    22

    đúng là đoạn code của MR langman chạy với BC 3.01 thì ok nhưng khi em dùng để chạy với code::blocks thì nó lại báo lỗi ko biết sao lại có vụ này ta ???
    NO

  9. #9
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    langman ah, em làm thế là không ổn đó. Trên BC3.1 for DOS là do môi trường DOS, ứng dụng chạy single-thread nên nó ít có sự cố hơn, nên không phát hiện ra bug thôi.

    Bài của comeonbaby, cấp phát bộ nhớ như thế là không đủ đâu. Cấp phát động có cái hay, nhưng nó cái tệ là phải hiểu rõ về nó nếu không thì bug ngay.

    code của R_R tương đối ổn. Nhưng Dr thì nghĩ là sử dụng while sẽ dễ hiểu hơn là dùng for.

    Các bạn chỉ nên xem cái cách làm thôi đừng có nhìn vào cái ngôn ngữ hoặc ide làm gì.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

    Sao R_R lại nói vậy ? R_R có nhìn thấy dòng dưới tôi ghi là chạy hoàn toàn đúng với BC 3.01 DOS ko ?

    Tôi tét trên BC 3.01 DOS chả có gì sai cả
    Vậy tui đề nghị cậu quăng cái compiler này đi là vừa.
    Trong C/C++ không có cái kiểu làm như cậu, cậu dựa vào chỗ nào mà cậu cho user input khi khai báo char* s.
    Vấn đề không phải là compiler mà cậu để không hiểu rõ vấn đề. Đây thực sự là lỗi rất cơ bản.
    s là gì ? 1 con trỏ tới char. Nó là chỉ đơn thuần là 1 con trỏ và hoàn toàn không có cái gì trong đó cả, tất cả là overwrite memory.
    Đây là bài đơn giản . Comeonbaby lại dùng giao mổ trâu giết vịt rồi
    Dù đơn giản đến mấy nếu không hiễu rõ vấn đề cũng như không.
    Cách duy nhất để run-time là phải cấp phát động, không có vấn đề gì về dùng giao mổ trâu giết vịt cả. Cái thiếu duy nhất của comeonbaby là quên free vùng nhớ mà thôi, còn lại nó hoàn toàn chính xác.

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

  1. 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
  2. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  3. Kỹ thuật C++ Các quy tắc nhập chuỗi trong C++, làm thế nào để nhập chuỗi có khoảng trắng?
    Gửi bởi quyen1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 20-11-2010, 03:36 PM
  4. Nối hai chuỗi nhập vào từ bàn phím, nhờ sửa giúp code!
    Gửi bởi vucong231987 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 30-07-2010, 04:48 PM
  5. Code xử lý chèn, và nối chuỗi trong C++. Hàm chèn chuỗi không chạy được?
    Gửi bởi luckyluke trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 01-03-2008, 04:56 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