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

Đề tài: Tách và chuẩn hóa họ tên từ chuỗi

  1. #1
    Ngày gia nhập
    01 2010
    Bài viết
    9

    Question Tách và chuẩn hóa họ tên từ chuỗi

    Đề bài : nhập vào 1 xâu họ và tên có thể có nhiều dấu cách ....
    Từ chuối đó In ra Họ, Tên Đệm , Tên
    Ví dụ nhập vào : hoang thi thuy linh
    In ra :
    Ten :linh
    Ten Dem: thi thuy
    Ho : hoang
    Đây là bài mình đang làm nhưng không hiểu sao in ra tên lại bị sai

    Code:
    #include <conio.h>
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    
    int main(){
            char str[100], ho[20], ten[20], tenDem[40], temp[100];
            int d1, d2,j,t;
            
            printf("Nhap Ho Ten cua ban:");
            gets(str);
            int nLen = strlen(str);
            // xoa dau cach dau` chuoi
            while(str[0]==' '){
                    strcpy(str,&str[1]);     
            }
            // xoa dau cach cuoi chuoi 
            while(str[nLen-1] == ' '){
                    nLen--;         
                    str[nLen]=0;
            }
            // xoa dau cach giua chuoi 
            for(int i=0;i<nLen;i++) {
                if(str[i]==' ' && str[i+1]==' ') {
                    for(int j=i;j<nLen;j++) {
                        str[j]=str[j+1];    
                    }
                    i--;    
                }
            }
            printf("\n Chuoi sau khi Chuan hoa: %s",str);
            getch();
            //strcpy(temp,str);
            
            //Lay ho
            for(int i=0;i<nLen;i++){
                ho[i]=str[i];
                if(str[i] == ' ') {
                    d1=i; 
                    break;
                }
            }
            printf("\n Ho:%s",ho);   
            getch();
            
           // lay  so ky tu cua ten
        
            for(int i=nLen-1;i>0;i--)
            {
                 if(str[i]==' ') {
                    d2=i; 
                    break;
                 }
            }
            // them cac ky tu cua ten vao mang
            
            for(int i=d2+1, j=0;i<nLen;i++,j++){
                if(str[i]!=0){
                    ten[j]=str[i];
                }
                j++;                 
            }
            
            //printf("\n%d",d2);
            printf("\n Ten:%s",ten);
            
            //for(int i=0;i<strlen(ten);i++) printf("\n%c \t", ten[i]);
            getch();
            for(int i=d1+1,t=0;i <d2; i++){
                    tenDem[t]=str[i];
                    t++;
            }
            printf("\n Ten Dem:%s",tenDem);
            getch();
            
            printf("\n Ho cua ban la: %s", ho);
            printf("\n Ten dem cua ban la: %s", tenDem);
            printf("\n Ten cua ban la: %s", ten);
                
            getch();
        }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    C++ Code:
    1.  // them cac ky tu cua ten vao mang
    2.        
    3.         for(int i=d2+1, j=0;i<nLen;i++)
    4.         {
    5.             ten[j]=str[i];
    6.             j++;                
    7.         }
    8.         ten[j]='\0';

    Ngoài ra bạn có thể dùng ngay
    strcpy(ten,&str[d2+1]) để copy tên đã lọc vào chuỗi ten
    Để tránh lại việc phát minh lại bánh xe . Mà nếu thích phát minh lại bánh xe cũng dc nếu bạn muốn hiểu nguyên lý của bánh xe

  3. #3
    Ngày gia nhập
    01 2010
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    C++ Code:
    1.  // them cac ky tu cua ten vao mang
    2.        
    3.         for(int i=d2+1, j=0;i<nLen;i++)
    4.         {
    5.             ten[j]=str[i];
    6.             j++;                
    7.         }
    8.         ten[j]='\0';

    Ngoài ra bạn có thể dùng ngay
    strcpy(ten,&str[d2+1]) để copy tên đã lọc vào chuỗi ten
    Để tránh lại việc phát minh lại bánh xe . Mà nếu thích phát minh lại bánh xe cũng dc nếu bạn muốn hiểu nguyên lý của bánh xe
    cám ơn ! mình mới học lại mà , chả nhớ j.
    cái vấn đề của mình bây giờ không phải thế mà là khi lấy tên, têm đệm, họ, ra thì in ra sai
    bạn cứ chạy thì hiểu ngay ,,,,

  4. #4
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    vấn đề của bạn đây.bạn xem kĩ giá trị địa chỉ ô nhớ.
    theo mình nên dùng con trỏ.
    Attached Thumbnails Attached Thumbnails debug1.PNG  
    HT117-5277

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi treatmaster Xem bài viết
    vấn đề của bạn đây.bạn xem kĩ giá trị địa chỉ ô nhớ.
    theo mình nên dùng con trỏ.
    Chà, bộ test ấn tượng quá ) =))

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định Tách và chuẩn hóa họ tên từ chuỗi

    Sau khi xóa dấu trắng giữa chuỗi, cần phải tính lại nLen.
    Vả lại phần code xóa dấu trắng giữa chuỗi chỉ cần gọi hàm strcpy để copy đoạn sau, không cần phải dồn chuỗi.

    tb. Bài này code đúng thì chỉ cần 1 vòng lặp, vừa chuẩn hóa chuỗi, vừa tách tên họ.

  7. #7
    Ngày gia nhập
    01 2010
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Sau khi xóa dấu trắng giữa chuỗi, cần phải tính lại nLen.
    Vả lại phần code xóa dấu trắng giữa chuỗi chỉ cần gọi hàm strcpy để copy đoạn sau, không cần phải dồn chuỗi.

    tb. Bài này code đúng thì chỉ cần 1 vòng lặp, vừa chuẩn hóa chuỗi, vừa tách tên họ.
    vòng lặp thế nào ạ anh :|

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Code:
    Đặt một biến daCoDauTrang
    Đọc chuỗi:
      - Nếu gặp kt không phải dấu trắng thì
          ~ copy
          ~ nếu daCoDauTrang != 0 thì đó là ký tự đầu từ
              . Nếu chưa có họ thì đó là họ, nếu có họ rồi thì đó là đệm
              . Nếu có đệm rồi thì đó là tên (hoặc đệm, giải quyết sau)
          ~ đặt daCoDauTrang = 0
      - Nếu gặp dấu trắng thì
          ~ nếu daCoDauTrang == 0 thì copy, không thì bỏ qua
          ~ đặt daCoDauTrang = 1
      - Nếu gặp '\0' (kết chuỗi) thì
          ~ nếu daCoDauTrang == 0 thì copy
          ~ nếu daCoDauTrang != 0 thì copy vào kt trước đó
    (để bỏ các dấu trắng đầu chuỗi, daCoDauTrang phải khởi đầu bằng trị 1

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

  1. Bài tập C Chuẩn hóa xâu ký tự tên người trong lập trình C
    Gửi bởi zero22hero 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-09-2014, 09:24 PM
  2. Bài tập về chuẩn hóa chuỗi
    Gửi bởi thongnlkh_aptech trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 22
    Bài viết cuối: 29-04-2014, 12:11 AM
  3. Chuẩn hóa chuỗi!!! Help
    Gửi bởi pato24193 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 02-01-2013, 09:32 PM
  4. Bài tập C Có Chuẩn Hóa Chuỗi Xóa Tab Và Xuống Dòng ?
    Gửi bởi traipro_latuiday trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 31-12-2011, 01:26 PM
  5. Hỏi về chuẩn hóa chuỗi ký tự trong MFC (VC++)
    Gửi bởi huyfeng trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 14-10-2009, 02:42 PM

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