1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

8 Hàm về chuỗi kí tự

Thảo luận trong 'Lập trình' bắt đầu bởi phoenix, 30 Tháng năm 2009.

  1. phoenix Administrator

    Số bài viết: 633
    Đã được thích: 13
    Điểm thành tích: 0
    1. Biến 1 chuỗi thành chuỗi In hoa
    2. Biến 1 chuỗi thành chuỗi thường
    3. Đảo chuỗi
    4. Lấy tên riêng
    5. Chuỗi chuẩn hóa
    6. Đếm số lượng và liệt kê từ
    7. Từ dài nhất trong chuỗi
    8. Xóa tất cả khoảng trắng
    Mã:
    [FONT=Courier New]#include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    unsigned int mystrlen(char *s);
    char* mystrupr(char *s);
    char* mystrlwr(char *s);
    char* mystrrev(char *s);
    char* proper(char *s);
    char* XoaKyTu(char *s, int vt);
    char* standard(char *s);
    char* XoaTatCaKhoangTrang(char *s);
    int DemSoLuongVaLietKeTu(char *s);
    char* TimTuDaiNhat(char *s);
    void LietKeCacTuDaiNhat(char *s);
    
    void main()
    {
       char s[100];
    
       printf("Nhap mot chuoi: ");
       gets(s);
       printf("Chuoi vua nhap la: \"%s\"\n", s);
    
       printf("Chuoi IN: \"%s\"\n", mystrupr(s));
       printf("Chuoi thuong: \"%s\"\n", mystrlwr(s));
       printf("Chuoi dao: \"%s\"\n", mystrrev(s));
       printf("Chuoi ten rieng: \"%s\"\n", proper(s));
       printf("Chuoi chuan hoa: \"%s\"\n", standard(s));
       
       int soluong = DemSoLuongVaLietKeTu(s);
       printf("Co tong cong %d tu\n", soluong);
    
       printf("Mot trong cac tu dai nhat la: %s\n", TimTuDaiNhat(s));
       
       LietKeCacTuDaiNhat(s);
    
       printf("Chuoi sau khi xoa tat ca khoang trang: \"%s\"\n", XoaTatCaKhoangTrang(s));
    }
    
    unsigned int mystrlen(char *s)
    {
       unsigned int len = 0;
       
       while (s[len] != '\0')
          len++;
    
       return len;
    }
    
    char* mystrupr(char *s)
    {
       for (int i=0; i<strlen(s); i++)
          if (s[i] >= 'a' && s[i] <= 'z')
             s[i] = s[i] - 32;
    
       return s;
    }
    
    char* mystrlwr(char *s)
    {
       int n = strlen(s);
       
       for (int i=0; i<n; i++)
          if (s[i] >= 'A' && s[i] <= 'Z')
             s[i] = s[i] + 32;
    
       return s;
    }
    
    char* mystrrev(char *s)
    {
       int n = strlen(s);
       
       // 01234 -> 43210
       for (int i=0; i<n/2; i++)
       {
          char t = s[i];
          s[i] = s[n-1-i];
          s[n-1-i] = t;
       }
    
       return s;
    }
    
    char* proper(char *s)
    {
       strlwr(s);
    
       if (strlen(s) > 0)
       {
          if (s[0] >= 'a' && s[0] <= 'z')
             s[0] = s[0] - 32;
    
          for (int i=1; i<strlen(s); i++)
             if (s[i] >= 'a' && s[i] <= 'z' && s[i-1] == ' ')
                s[i] = s[i] - 32;
       }
    
       return s;
    }
    
    
    char* XoaKyTu(char *s, int vt)
    {
       if (vt>=0 && vt<strlen(s))
       {
          // Cach 1
          //for (int i=vt; i<strlen(s)-1; i++)
          //   s[i] = s[i+1];
    
          //s[strlen(s)-1] = '\0';
    
          // Cach 2
          for (int i=vt; i<strlen(s); i++)
             s[i] = s[i+1];
       }
    
       return s;
    }
    
    char* standard(char *s)
    {
       // Xoa khoang trang du dau chuoi
       while (s[0] == ' ')
          XoaKyTu(s, 0);
    
       // Xoa khoang trang du cuoi chuoi
       while (s[strlen(s)-1] == ' ')
          XoaKyTu(s, strlen(s)-1);
    
       // Xoa khoang trang du giua chuoi
       for (int i=1; i<strlen(s)-2; )
          if (s[i] == ' ' && s[i+1] == ' ')
             XoaKyTu(s, i);
          else
             i++;
    
       return s;
    }
    
    char* XoaTatCaKhoangTrang(char *s)
    {
       // Cach 1
       /*for (int i=0; i<strlen(s); i++)
          if (s[i] == ' ')
          {
             XoaKyTu(s, i);
             i--;
          }*/
    
       // Cach 2
       /*for (int i=0; i<strlen(s); )
          if (s[i] == ' ')
             XoaKyTu(s, i);
          else
             i++;*/
    
       // Cach 3
       for (int i=strlen(s)-1; i>=0; i--)
          if (s[i] == ' ')
             XoaKyTu(s, i);
    
       return s;
    }
    
    int DemSoLuongVaLietKeTu(char *s)
    {
       char *s2 = strdup(s); // hoac s = strdup(s);
    
       char *p;
       int dem = 0;
       
       p = strtok(s2, " "); // Luu y, sau khi su dung strtok thi chuoi s bi thay doi
       
       while (p != NULL)
       {
          dem++;
          printf("Tu thu %d: %s\n", dem, p);
    
          p = strtok(NULL, " ");
       }
    
       return dem;
    }
    
    char* TimTuDaiNhat(char *s)
    {
       char *s2 = strdup(s);
    
       char *p, *pmax;
       int lmax = 0;
    
       p = strtok(s2, " ");
       
       while (p != NULL)
       {
          if (strlen(p) > lmax)
          {
             pmax = p;
             lmax = strlen(p);
          }
    
          p = strtok(NULL, " ");
       }
    
       return pmax;
    }
    
    void LietKeCacTuDaiNhat(char *s)
    {
       char *s2 = strdup(s);
    
       int lmax = strlen(TimTuDaiNhat(s2));
    
       char *p;
    
       printf("Cac tu dai nhat la:\n");
       p = strtok(s2, " ");
       
       while (p != NULL)
       {
          if (strlen(p) == lmax)
             puts(p);
    
          p = strtok(NULL, " ");
       }
    }[/FONT]
  2. rptdnmqs New Member

    Số bài viết: 15
    Đã được thích: 0
    Điểm thành tích: 0
    đây là thư viện do em lập trình nó hỗ trợ tương đối lớn chỉ cần copy và lưu thành file.h rồi mang vào include của chỗ trình biên dịch.
    #include<stdio.h>
    #include<conio.h>
    #ifndef macro_h
    #define macro_h
    int len(char *s)//--->tinh do dai chuoi
    {
    int i=0;
    while(s!='\0')
    {i++;
    };
    return i;
    }
    //************************************
    //------>Macro so sanh 2 chuoi
    int cmpstr(char *s1,char *s2)
    {
    int i=0,j=0;
    if(len(s1)==len(s2))
    {
    while(s1!='\0' && s2!='\0')
    {
    if(s1==s2)
    {
    j++;
    }
    i++;
    };
    if(j==len(s2))
    return 1;//hai chuoi bang nhau
    else
    return 0;//do dai cung nhung ki tu khac nhau tra ve sai
    }
    else
    {//do dai chi can khac la tra ve sai
    return 0;
    }
    }//----->ket thuc Macro
    //*******************************************************
    //---->Macro chat chuoi tu trai->phai lay 1 do dai length
    char *mid(char *s,int length,int start)
    {
    int j=0;
    char *a;
    a=new char [length+1];
    if((start+length)<=len(s))
    {
    while(s[start]!=NULL && j<length)
    {
    a[j]=s[start];
    start++;
    j++;
    };
    a[j]=NULL;
    return a;
    }
    else
    return NULL;
    }//-->het thuc Macro
    //*********************************************************
    /////////->Macro cat chuoi tu vi tri start den vi tri end
    char *midi(char *s,int start,int end)
    {
    int i=0;
    char *a;
    if(start>=0)
    {
    a=new char [end-start+1];
    while(s[start]!=NULL && start<=end)
    {
    a=s[start];
    start++;
    i++;
    };
    a=NULL;
    return a;
    }
    else
    return NULL;
    }
    //-->>ket thuc macro nay
    #endif;
  3. vietfifa New Member

    Số bài viết: 9
    Đã được thích: 0
    Điểm thành tích: 1
  4. lqh New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0

Chia sẻ trang này