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ố 22 kết quả

Đề tài: Xóa dấu cách trong chuỗi như thế nào?

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

    Mặc định Xóa dấu cách trong chuỗi như thế nào?

    bài tâp của bọn em là.Nếu bây jo 1 người nhập
    "Cong(3dấu cách)dong(2dấu cách)C viet" thi phải in ra
    "Cong dong C viet"
    Anh nào giup em với dấu
    Đã được chỉnh sửa lần cuối bởi adam452 : 23-03-2008 lúc 02:54 PM. Lý do: em cách rồi mà nó hok hiện

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

    - theo cách suy nghĩ tự nhiên nhất thì để chuẩn hóa một chuỗi thì bạn phải xóa bớt các kí tự trắng dư thừa đi - để lại một khoảng trắng (ở giữa chuỗi) và xóa các khoảng trằng ở cuối và đầu chuỗi.Đây là một số hàm làm như vậy...bạn tham khảo nhé..

    C Code:
    1. void xoakytu(char str[100],int vitri)
    2. {
    3.     int n=strlen(str);
    4.     for(int i=vitri;i<n;i++)
    5.     {
    6.         str[i]=str[i+1];
    7.     }
    8.    
    9. }
    C Code:
    1. void xoakhoangtrangdauchuoi(char str[100])
    2. {
    3.     int k=0;
    4.     while(str[k]==32)
    5.     {
    6.         xoakytu(str,k);
    7.         //k=0; note:xem phan xoa khoang trang dau
    8.     }
    9. }

    C Code:
    1. void xoakhoangtranggiuachuoi(char str[100])
    2. //xoa 1 khoang trang giua hai tu cua chuoi neu co 2 khoang trang
    3. {
    4.     int n=strlen(str);
    5.     for(int i=0;i<n;i++)
    6.     {
    7.         if (str[i]==32)
    8.         {
    9.             if (str[i+1]==32)
    10.             {
    11.                 int k=i;
    12.                 while (str[i]==32)
    13.                 {
    14.                     xoakytu(str,i);
    15.                     i=k+1;
    16.                 }
    17.             }
    18.         }
    19.     }
    20. }

    C Code:
    1. void xoakhoangtrangcuoichuoi(char str[100])
    2. {
    3.     int k=strlen(str)-1;
    4.     while (str[k]==32)
    5.     {
    6.         xoakytu(str,k);
    7.         k=strlen(str)-1;
    8.     }
    9. }
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 23-03-2008 lúc 03:29 PM.
    No way, No success..

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

    Thank hacker_mubaohiem.Em sẽ xem và code lại.Để bài tập hoàn chỉnh
    cho em hoi anh cho nay
    C Code:
    1. void xoakhoangtranggiuachuoi(char str[100])
    2. //xoa 1 khoang trang giua hai tu cua chuoi neu co 2 khoang trang
    3. {
    4.     int n=strlen(str);
    5.     for(int i=0;i<n;i++)
    6.     {
    7.         if (str[i]==32)
    8.         {
    9.             if (str[i+1]==32)
    10.             {
    11.                 int k=i;//tai sao cho nay anh lai them bien k
    12.                 while (str[i]==32)
    13.                 {
    14.                     xoakytu(str,i);
    15.                     i=k+1;// cho nay anh co the? thay bang i=i+1;
    16.                 }
    17.             }
    18.         }
    19.     }
    20. }


    void xoakhoangtranggiuachuoi(char str[100])
    Anh oi nếu khoảng trắng là (tab) thì hàm này hok làm việc đâu anh ạ

  4. #4
    Ngày gia nhập
    09 2010
    Bài viết
    8

    // Thêm biến k để xóa phần tử i + 1
    Khoảng trăng Tab dc tính bằng 4 dấu cách.Mình chưa thử

  5. #5
    Ngày gia nhập
    08 2010
    Nơi ở
    Vô gia cư
    Bài viết
    147

    Trích dẫn Nguyên bản được gửi bởi Linus Xem bài viết
    // Thêm biến k để xóa phần tử i + 1
    Khoảng trăng Tab dc tính bằng 4 dấu cách.Mình chưa thử
    Bạn thử
    PHP Code:
    cout << sizeof('\t'); 
    xem kết quả thế nào? Hình thức vậy nhưng không thể nói là được tính bằng 4 dấu cách.
    Muốn xóa Tab thì chỉ cần xét thêm
    PHP Code:
    if ( str] == 32 || str] == '\t' 
    thui. Phức tạp hóa chi

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

    Smile Xóa toàn bộ khoảng trắng trong chuỗi

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    void main()
    {
    char s[50];
    int len,i=0,j;
    printf("Nhap chuoi:");
    gets(s);
    len=strlen(s);
    for(i=0,j=0;i<len;i++)
    {
    if(s[i]!=32)
    {
    s[j]=s[i];
    j++;
    }
    }
    printf("in chuoi moi da xoa bo het toan bo khoang trang\n");

    printf("%s",s);
    getch();

    }

  7. #7
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nội
    Bài viết
    381

    code bài chuỗi tối ưu của mình bạn có thể tham khảo:
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include<stdlib.h>
    5.  
    6. int main ()
    7. {
    8.     clrscr();
    9.     char pChuoi[100];
    10.     char* pChuoiXuly;
    11.     int i;
    12.     int n;
    13.     int k;
    14.     char s = 0;
    15.     printf("\n Nhap mot Chuoi bat ky: ");
    16.     gets(pChuoi);
    17.     n = strlen(pChuoi);
    18.     pChuoiXuly = (char*)malloc(n);
    19.     pChuoiXuly[0] = 0;
    20.  
    21.     k = 0;
    22.     for( i = 0; i < n; i++)
    23.     {
    24.         if(pChuoi[i] != ' ' && pChuoiXuly[0] == 0)
    25.         {
    26.             pChuoiXuly[k] = pChuoi[i];
    27.             k++;
    28.         } else if(s != ' ' || pChuoi[i] != ' ')
    29.         {
    30.             pChuoiXuly[k] = pChuoi[i];
    31.             k++;
    32.         }
    33.         s = pChuoi[i];
    34.     }
    35.     if(s == ' ') pChuoiXuly[k - 1] = '\0';
    36.  
    37.     pChuoiXuly[k] = '\0';
    38.     printf("\n pChuoi toi uu:   %s", pChuoiXuly);
    39.     free(pChuoiXuly);
    40.     getch();
    41.     return 0;
    42. }

    skype: hvphu2010
    Yahoo: hvphu2010
    Sdt: 0129 609 4567

  8. #8
    Ngày gia nhập
    01 2011
    Bài viết
    30

    Dùng 2 vòng for, một vòng để phát hiện dấu cách, một vòng để dịch các kí tự từ sau lên trước nếu gặp hai dấu cách liền nhau.
    Bạn Search bài toán chuẩn hóa sâu nhé! trên forum mình khá nhiều bài kiểu này, trước mình cũng vật lộn vì nó mấy hai, ba ngày mãi mới hiểu hê hê.
    Sau khi xóa xong các khoảng trắng giữa bạn có thể mở rộng bài toán bằng việc cho thêm ý là loại bỏ các khoảng trắng thừa đầu và cuối dòng, thêm dấu chấm câu nếu chứa có. Làm cái này khá thú vị đấy bạn ạ.
    lazy code

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

    Trích dẫn Nguyên bản được gửi bởi toansvcn Xem bài viết
    Dùng 2 vòng for, một vòng để phát hiện dấu cách, một vòng để dịch các kí tự từ sau lên trước nếu gặp hai dấu cách liền nhau.
    ...
    Bài này đã giải nhiều lần rồi. Không cần phải 2 vòng for. Chỉ dùng 1 vòng for đọc và chép lại từng ký tự một, khi gặp dấu cách đã chép trước đó rồi thì bỏ qua không chép. Cách làm gần giống như kitti, khác ở chỗ xử lý luôn tại trên chuỗi thay vì tạo một chuỗi mới.

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

    Gửi mọi người code bài này. Minh bien tap tren Dev-C++ nen la co cai: //<chu thich>
    Bài này mình đã đưa về dạng Chuẩn hóa tên người:
    Ai làm gọn hơn được thì pm minh nhé!^^~
    Thanks!
    Code:
    #include <stdio.h>
    
    char thuong (char a);
    char hoa (char ch);
    void StrDel(char *s, int n);
    
    int main(){
        char ten[30];
        char *p;
        int i=0;
        fflush(stdin);
        gets(ten);
        while (ten[0]==' ') StrDel(ten, 1); //xoa dau cach o dau
        while (ten[strlen(ten)-1]==' ') ten[strlen(ten)-1]='\0'; //xoa dau cach o cuoi
    //  while (ten[strlen(ten)-1]==' ') StrDel((ten+strlen(ten)-1), 1);//xoa dau cach o cuoi
    //xoa dau cach o giua -------------------------------
        while (ten[i]!= '\0'){
            if (ten[i]==' ' && ten[i+1]==' '){
                StrDel(ten+i, 1);
                i--;
            }
            i++;
        }
    //-------------------------------
        for (i=0; i<strlen(ten); i++) ten[i]=thuong(ten[i]);//viet thuong tat ca cac ky tu cua ten
        ten[0] = hoa(ten[0]);//viet hoa chu cai dau tien cua ho
    //viet hoa cac chu cai dau tien sau dau cach-----------------
        for (i=1; i<strlen(ten); i++){
            if (ten[i]==' ') ten[i+1]=hoa(ten[i+1]);
        }
    //-------------------------------
        printf("%s\n", ten);    //in ra ten sau khi da chuan hoa
        system("pause");
        return 0;
    }
    //ham xoa ky tu
    void StrDel(char *s, int n){
    	memmove(s, s + n, strlen(s+n)+1);
    }
    //ham doi cac ky tu chu sang chu thuong
    char thuong (char a){
        if ('A'<=a && a<='Z') return (a+'a'-'A');
        return a;
    }
    //ham doi cac ky tu chu sang chu hoa
    char hoa (char ch){
         if ('a'<=ch && ch<='z') return (ch-'a'+'A');
         return ch;
    }
    Đã được chỉnh sửa lần cuối bởi strytary : 07-12-2011 lúc 08:58 AM.

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

  1. Xóa dấu trong chuỗi tiếng Việt như thế nào?
    Gửi bởi dien trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 126
    Bài viết cuối: 27-12-2016, 04:19 PM
  2. Algorithm Xóa một chuỗi con trong một chuỗi kí tự dài như thế nào ?
    Gửi bởi hu-xeko trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 01-08-2011, 02:00 PM
  3. Lập trình C làm thế nào dể xóa một phần tử trong 1 chuỗi hoặc 1 mảng
    Gửi bởi nhoccon.uit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 26-12-2010, 10:41 PM
  4. cách xóa kí tự trống trong chuỗi như thế nào?
    Gửi bởi manutd1988 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 13-11-2010, 04:29 PM
  5. cho 1 chuỗi, tìm 1 từ và xóa từ này trong chuỗi đó nếu tìm thấy
    Gửi bởi trai xu nghe 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: 30-01-2010, 03:32 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