Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Mình gặp vấn đề về xâu chuỗi .

  1. #1
    Ngày gia nhập
    09 2017
    Bài viết
    0

    Mặc định Topic về xử lý chuỗi.

    -Hàm tách tên, họ, đệm từ một chuỗi họ và tên cho trước.
    -Bạn nào có ý tưởng hay hơn thì chia sẻ phía dưới nhé.
    -Sẵn nhờ mấy bạn nhận xét giúp mình về code luôn, mình là newbie .
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4.  
    5. void tach(char x[], int n)
    6. {
    7.     //Tach ho
    8.     int i;
    9.     printf("Ho cua ban la:");
    10.     for (i = 0; i<n; i++)
    11.     {
    12.         printf("%c", x[i]);
    13.         if (x[i] == ' ')
    14.             break;
    15.     }
    16.     int b = i + 1;
    17.     printf("\n");
    18. //Tach ten
    19.     int j,m;
    20.     printf("Ten cua ban la:");
    21.     for (j= n - 1; j>0; j--)
    22.     {
    23.    
    24.         if (x[j] == ' ')
    25.             break;
    26.     }
    27.     for(m=j+1;m<n;m++)
    28.     {
    29.         printf("%c",x[m]);
    30.         }
    31.     int a = j;
    32.     printf("\n");
    33. //Tach dem
    34.     int k;
    35.     printf("Ten dem cua ban la:");
    36.     for (k = b; k<a; k++)
    37.     {
    38.         printf("%c", x[k]);
    39.     }
    40. }
    41.  
    42. void main()
    43. {
    44.     char x[100]; int n;
    45.     clrscr();
    46.     printf("Nhap ho va ten cua ban:");
    47.     gets(x);
    48.     n = strlen(x);
    49.     tach(x,n );
    50.     getch();
    51. }
    Đã được chỉnh sửa lần cuối bởi narutosimaha3 : 04-09-2017 lúc 01:27 PM.

  2. #2
    Ngày gia nhập
    01 2013
    Bài viết
    1,463

    0. Nếu thật sự cần thì n đã là tham số mặc định.
    1. Spec: 1 số tên có từ đứng đầu không phải là họ đâu.
    2. Dùng putchar() nhé.
    Đã được chỉnh sửa lần cuối bởi prog10 : 04-09-2017 lúc 02:45 PM.

  3. #3
    Ngày gia nhập
    09 2017
    Bài viết
    0

    Nếu để thoã mãn yêu cầu 1 của bạn, thì chắc phải hỏi thêm họ người ta nằm trước hay sau, rồi hỏi thêm bạn có mấy họ để mà xử lí quá :v

  4. #4
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    715

    Tách chuỗi theo ký tự ' ' e rằng hơi lủng củng bởi bạn nhập nguyên chuỗi = gets(), mà hàm này tự nó đã có xử lý khoảng trống nên bạn phải tìm cách khác thôi. Hoặc nói rõ cho người nhập gõ ký tự khác để phân cách - ký tự '_' chẳng hạn thì mọi chuyện quá dễ.
    Yêu mã hơn yêu em !!!

  5. #5
    Ngày gia nhập
    08 2017
    Bài viết
    47

    Bạn có sai gì không ? Tôi thấy nó chạy đúng theo định nghĩa, ký tự phân cách đầu cho họ, ký tự phân cách cuối cho tên, nếu cần thì bổ xung cắt bỏ khoảng trắng ở tên đệm (làm khi cần nâng cao, tôi không bàn về nó)
    C++ Code:
    1. //#include<conio.h>
    2. #include<stdio.h>
    3. #include<string.h>
    4.  
    5. void tach(char x[], int n){
    6. //Tach ho
    7.     int i;
    8.     printf("Ho cua ban la: ");
    9.     for (i = 0; i < n; i++){
    10.         printf("%c", x[i]);
    11.         if (x[i] == ' ') break;
    12.     }
    13.     int b = i + 1; //end of Ho
    14.     printf("\n");
    15. //Tach ten
    16.     printf("Ten cua ban la: ");
    17.     for (i = n - 1; i > 0; i--)
    18.         if (x[i] == ' ') break;
    19.     int a = i; // begin of Ten
    20.     for(i = a + 1; i < n; i++)
    21.         printf("%c",x[i]);
    22.     printf("\n");
    23. //Tach dem
    24.     printf("Ten dem cua ban la: ");
    25.     for (i = b; i < a; i++)
    26.         printf("%c", x[i]);
    27.     printf("\n");
    28. }
    29.  
    30. int main(){
    31.     char x[100]; int n;
    32.     //clrscr();
    33.     printf("Nhap ho va ten cua ban: ");
    34.     gets(x);
    35.    
    36.     n = strlen(x);
    37.     tach(x, n);
    38.     //getch();
    39.     printf("\n===Done===.\n");
    40. }


  6. #6
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    715

    Mặc định Mình gặp vấn đề về xâu chuỗi .

    Ờ do lủng củng với gets(), mượn tạm gets_s() và getchar() mã thử
    C Code:
    1. #include<stdio.h>
    2. #include<string.h>
    3.  
    4. #define     MAXNUMSTRING        10
    5. #define     MAXLENSTRING        50
    6.  
    7. // Tách ra tất cả các chuỗi con - Lấy chuẩn ngăn cách là 1 hoặc nhiều ký tự ' '
    8. // Chấp nhận tất cả trường hợp như khoảng trống ở đầu, nhiều khoảng trống ở giữa hoặc các khoảng trống ở sau
    9. // Đầu vào //// str - Chuỗi tổng
    10. // Đầu ra  //// pStr - Các chuỗi con được chép vào pStr
    11. // Giá trị trở về //// số chuỗi con trong mảng pStr
    12. int TachChuoi(char * str, char pStr[MAXNUMSTRING][MAXLENSTRING])
    13. {
    14.     char        *pStart, *pEnd;
    15.     int         nIndex = 0;
    16.  
    17.     if (!str || !strlen(str))                       // Kiểm tra con trỏ và chiều dài chuỗi
    18.         return 0;
    19.     pStart = str;
    20.     while (*pStart == ' ')                          // Bỏ qua các ký tự ' ' ở đầu chuỗi nếu có
    21.         pStart++;
    22.     for (pEnd = pStart; ; pEnd++)                   // Duyệt từng ký tự
    23.     {
    24.         if (*pEnd != ' ' && *pEnd != 0)             // Ký tự thường
    25.         {
    26.             pStr[nIndex][pEnd - pStart] = *pEnd;
    27.         }
    28.         else if (*pEnd == 0)                        // Ký tự NULL
    29.         {
    30.             pStr[nIndex++][pEnd - pStart] = 0;
    31.             break;
    32.         }
    33.         else                                        // Ký tự ' '
    34.         {
    35.             pStr[nIndex++][pEnd - pStart] = 0;
    36.             pStart = pEnd + 1;
    37.             while (*pStart == ' ')                  // Bỏ qua các ký tự ' ' kế tiếp
    38.                 pStart++;
    39.             if (*pStart == 0)                       // Ký tự NULL theo sau ' '
    40.                 break;
    41.             pEnd = pStart - 1;
    42.         }
    43.     }
    44.     return nIndex;
    45. }
    46. void main()
    47. {
    48.     int     cCount;
    49.     char    x[100];
    50.     char    pStr[MAXNUMSTRING][MAXLENSTRING] = { 0 };
    51.     printf("\n Nhap ho va ten cua ban: ");
    52.     gets_s(x);
    53.     cCount = TachChuoi(x, pStr);
    54.     if (!cCount)
    55.         printf("\n Ban khong co ho ten ???\n");
    56.     else if (cCount == 1)               // Chỉ có tên
    57.         printf("\n Ten cua ban la: %s\n", pStr[0]);
    58.     else if (cCount == 2)           // Có Họ và tên
    59.     {
    60.         printf("\n Ho cua ban la: %s", pStr[0]);
    61.         printf("\n Ten cua ban la: %s\n", pStr[1]);
    62.     }
    63.     else
    64.     {
    65.         printf("\n Ho cua ban la: %s", pStr[0]);
    66.         printf("\n Dem cua ban la:");
    67.         for (int i = 1; i < cCount - 1; i++)
    68.             printf(" %s", pStr[i]);
    69.         printf("\n Ten cua ban la: %s\n", pStr[cCount - 1]);
    70.     }
    71.     getchar();
    72. }

    Mã trên vẫn chưa kiểm tra đầu nhập cũng như chưa xử lý chuỗi vượt quá các #define, chỉ để dùng thử cách chạy con trỏ thôi.

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		abcd.jpg
Lần xem:	2
Size:		28.1 KB
ID:		58348
    Yêu mã hơn yêu em !!!

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