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

Đề tài: Đém số lần xuất hiện kí tự trong chuỗi

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

    Mặc định Đém số lần xuất hiện kí tự trong chuỗi

    Nhập vào chuỗi"đếm số lần xuất hiện kí tự trong chuỗi
    mình làm thế này
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    int kiemtra(char st[],int i)
       {
       
    char t=st[i];
       
    int j;
       for(
    j=0;j<i;j++)
           {
           if(
    t==st[j])
               return 
    0;
           else
               return 
    1;
          }
       }
      
    /* int kiemtra(int a[],int n,int i)
    {
        int t=a[i];
        for (int j=0;j<i;j++)
        if (t==a[j])return 0;
        return 1;
    }*/
    int dem(char st[],int i)
       {
       
    char t=st[i];
       
    int dem=0;
       
    int j;
       for(
    j=0;j<strlen(st);j++)
           {
           if(
    t==st[j])
               
    dem=dem+1;
           }
       return 
    dem;
       }
    /*chuong trinh chinh*/
    void main()
    {
    clrscr();
    char st[255];
    printf("Nhap vao chuoi:");
    gets(st);
    printf("Ki tu %c: xuat hien %d\n",st[0],dem(st,0));
    int i;
    for(
    i=1;i<strlen(st);i++)
        {
        if(
    kiemtra(st,i))
          
    printf("Ki tu %c xuat hien:%d\n",st[i],dem(st,i));
        }
    getch();

    vấn đề là làm sao để xác định kí tự trắng
    thứ hai là:in ra bị trùng ví dụ nhap vào annn ngoc thì nó xuất ra là
    a:1 lần
    n:4 lần
    n:4 lần
    n:4 lần
    n:4 lần
    ........
    rồi :1 lần tứ là kí tự trắng 1 lần đó làm sao để gi ra là kí tự trắng một lần
    mọi người giúp với

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Đà Lạt, Lâm Đồng
    Bài viết
    255

    đây:
    để xuất ra kí tự trắng
    PHP Code:
    for(i=1;i<strlen(st);i++) 
        { 
        if(
    kiemtra(st,i)) 
          if(
    st[i] != ' ' )
                   
    printf("Ki tu %c xuat hien:%d\n",st[i],dem(st,i)); 
          else    
                   
    printf("Ki tu trang xuat hien:%d\n",st[i],dem(st,i));

    còn để tránh rùng lắp thì bạn nên dừng 1 mảng phụ lưu các ký tự đã xuất chẳng hạn
    Hoa Tử Đinh Hương Phụng Vũ Phi Y

  3. #3
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    bài này theo mình nghĩ giống như bài đếm số lần xuất hiện các số nguyên trong mảng thôi.
    nếu gặp 'space' ko đếm. và đếm từ i trở đi, cho 1 hàm kiểm tra xem có bị trùng ko?
    có 1 cái topic gần đây, kiểu thế này mình có làm đó, bạn tìm xem, có thể tham khảo. Lười search quá..

    nói có sách mách có chứng. và code đây, phát triễn trên nền của bạn luôn
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. int kiemtra(char *p,char s,int n)
    5. {
    6.      int j=0;
    7.      for(int i=0;i<=n;i++)
    8.      if(s==p[i]) j++;  
    9.      if(j==1)return 1;
    10.      return 0;  
    11. }
    12. int dem(char *p,char s,int i)
    13. {
    14.    int dem=0;
    15.    for (int j=i;j<strlen(p);j++)
    16.    {
    17.        if(s==p[j]) dem++;
    18.    }
    19.    return dem;
    20. }
    21. int main ()
    22. {
    23.     char st[255];
    24.     printf("Nhap vao chuoi:");
    25.     gets(st);
    26.     for(int i=0;i<strlen(st);i++)
    27.     {
    28.        if((st[i]!=' ')&&(kiemtra(st,st[i],i)))
    29.        printf("ki tu %c co %d lan xuat hien\n",st[i],dem(st,st[i],i));
    30.     }
    31. getch();
    32. }

    hjc, thiếu mất rùi, tính cả khoảng trắng nữa
    để Fix lại đã. sorry nha.
    Hẹn buổi tối nha, giờ mình phải đi lao động rùi...hjc
    Embedded ARM

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

    Bài này trao đổi nhiều rồi. Có 2 cách : mảng đánh dấu hoặc Distribution counting. Lần sau bạn search trước khi hỏi nhé.
    Cách này sử dụng Distribution counting.
    C Code:
    1. #include <stdio.h>
    2. #include <string.h>
    3.  
    4. #define SIZE 256
    5.  
    6. int main()
    7. {
    8.     int  count[SIZE] = {0};
    9.     char str[] = "This is a test ...";
    10.     int  len = strlen( str );
    11.     int  i;
    12.  
    13.     for( i = 0; i < len; i++ )
    14.         count[ str[i] ]++;
    15.  
    16.     printf( "%s\n", str );
    17.     for( i = 0; i < SIZE; i++ )
    18.         if( count[i] )
    19.             printf( "'%c' : %-3d time(s)\n", (char)(i), count[i] );
    20.  
    21.     return 0;
    22. }

  5. #5
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    Như đã hẹn, mình xin đc Post lại. có gì các bro bỏ qua nha.
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. int kiemtra(char *p,int i)
    5. {
    6.      int kt=0;
    7.      for(int j=0;j<=i;j++)
    8.      if(p[i]==p[j]) kt++;  
    9.      if(kt>1)return 0;
    10.      return 1;  
    11. }
    12. int dem(char *p,int i)
    13. {
    14.    int dem=0;
    15.    for (int j=i;j<strlen(p);j++)
    16.    {
    17.        if(p[i]==p[j]) dem++;
    18.    }
    19.    return dem;
    20. }
    21. int main ()
    22. {
    23.     char st[255];
    24.     int tmp=0;
    25.     printf("Nhap vao chuoi:");
    26.     gets(st);
    27.     for(int i=0;i<strlen(st);i++)
    28.     {
    29.        if((st[i]!=' ')&&(kiemtra(st,i))==1)
    30.        printf("ki tu %c co %d lan xuat hien\n",st[i],dem(st,i));
    31.        if(st[i]==' ') tmp++;
    32.     }
    33.     printf("ki tu space co %d lan xuat hien",tmp);
    34. getch();
    35. }

    Hix, bài này quá Pro
    int main()
    {
    int count[SIZE] = {0};
    char str[] = "This is a test ...";
    int len = strlen( str );
    int i;

    for( i = 0; i < len; i++ )
    count[ str[i] ]++;

    printf( "%s\n", str );
    for( i = 0; i < SIZE; i++ )
    if( count[i] )
    printf( "'%c' : %-3d time(s)\n", (char)(i), count[i] );
    getch();
    return 0;
    }
    ai có thể chỉ cho mình tại sao lại thế này ko? count[ str[i] ]++;
    count[] là mảng mà
    cả đoạn này nữa printf( "'%c' : %-3d time(s)\n", (char)(i), count[i] );
    Embedded ARM

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

    Mặc định Đém số lần xuất hiện kí tự trong chuỗi

    Suy nghĩ chút là ra thôi mà ^__^
    1 ví dụ nữa nhé. Cho mảng mark[] chứa điểm của các học sinh( 0 - 9 ). Thống kê số điểm từng loại.
    C Code:
    1. #include <stdio.h>
    2. #define SIZE 10
    3.  
    4. int main()
    5. {
    6.     int count[SIZE] = {0};
    7.     int mark[] = {0,1,3,2,4,6,5,7,8,4,5,3,2,6,7,5,3,1,4,3,4,6,7,8,9};
    8.     int nMark = sizeof( mark ) / sizeof( int );
    9.     int i;
    10.  
    11.     // Dem so diem tung loai
    12.     for( i = 0; i < nMark; i++ )
    13.         count[ mark[i] ]++;
    14.  
    15.     // In ra tat ca cac diem
    16.     printf( "Diem cua cac hoc sinh :\n" );
    17.     for( i = 0; i < nMark; i++ )
    18.         printf( "%3d", mark[i] );
    19.    
    20.     // In ra so diem tung loai
    21.     printf( "\nDiem tung loai :\n" );
    22.     for( i = 0; i < SIZE; i++ )
    23.         if( count[i] )
    24.             printf( "%2d : %-2d time(s)\n", i, count[i] );
    25.  
    26.     return 0;
    27. }

  7. #7
    Ngày gia nhập
    05 2010
    Nơi ở
    E:\GiaiTri\Videos\
    Bài viết
    78

    printf( "'%c' : %-3d time(s)\n", (char)(i), count[i] );
    thực ra chỉ cần :
    printf( "'%c' : %-3d time(s)\n", i, count[i] );
    là đc..
    count[] là mảng nhưng cứ xem là bình thường thì ra thôi..trong count[str[i]] thì str[i] là 1 giá trị đúng ko..tiếp đó count[str[i]] cũng lại là 1 giá trị của mảng count[] .. cho vòng lặp chạy gặp kí tự nào thì tăng giá trị của phần tử trong mảng count của phần tử đó lên 1..hiểu sao nói vậy chứ tui chưa học chi mấy cái này hết...nhìn code thì tự dịch ra thôi..có chi sai bạn góp ý giúp...thanks.
    HTML Code:
        [B]học          = không học lại
        không học    = học lại
        cộng hai vế phương trình ta có:
        học(1+không) = học lại(không +1)
    <=> học = học lại.[/B]

  8. #8
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    ok, thanks, mình sẽ tìm hiểu vấn đề này. lúc nãy chát với bạn và phanvanngoc thế là ko vào đc 4rum....

    Hì, cuối cùng đã hiểu ra vấn đề, giải thuật hay quá, cảm ơn bạn NGHT90 nhiều nha.
    sau đây mình xin tổng hợp lại những cái gì mình đã học đc từ NGHT90, các bạn đã biết bỏ qua nha, còn ai chưa bít sẽ ... đc biết như mình.
    C Code:
    1. // test thu giai thuat distribution counting
    2. #include<stdio.h>
    3. #include<conio.h>
    4. #include<string.h>
    5. #define SIZE 256
    6. #define MAX 100
    7. void demkitu(char *p)
    8. {
    9.     int len=strlen(p),i;
    10.     int count[SIZE]={0};// khai bao mang dem, gan cho no ==0 het
    11.     for(i=0;i<len;i++) count[p[i]]++; // thuc hien dem so lan xuat hien
    12.     for(i=0;i<SIZE;i++) // tien hanh xuat
    13.        if(count[i]) printf("ki tu '%c' xuat hien %d lan\n",i,count[i]);
    14. }
    15. void demsonguyen(int *p,int n)
    16. {
    17.      int count[MAX]={0},i;
    18.      for(i=0;i<n;i++) count[p[i]]++;
    19.      for(i=0;i<MAX;i++)
    20.        if (count[i]) printf("so '%d' xuat hien %d lan\n",i,count[i]);
    21. }
    22. int main ()
    23. {
    24.     char st[SIZE];
    25.     int a[MAX],n;
    26.     printf("nhap mag ki tu :");
    27.     gets(st);
    28.     demkitu(st);
    29.     printf("-------------------------------------\n");
    30.     printf("nhap day so nguyen gom n so, n=");
    31.     scanf("%d",&n);
    32.     for(int i=0;i<n;i++)
    33.     {
    34.          printf("A[%d]=",i);
    35.          scanf("%d",&a[i]);  
    36.     }
    37.     demsonguyen(a,n);
    38.     getch();
    39. }
    Embedded ARM

  9. #9
    Ngày gia nhập
    04 2010
    Nơi ở
    Đà Lạt, Lâm Đồng
    Bài viết
    255

    Trích dẫn Nguyên bản được gửi bởi hienclubvn Xem bài viết
    Hix, bài này quá Pro

    ai có thể chỉ cho mình tại sao lại thế này ko?
    PHP Code:
    countstr[i] ]++; 
    count[] là mảng mà

    str[i] là 1 ký tự, nó tg đương với 1 số kiểu byte [ 0...255] hoặc kiểu int [-127 ...128]
    Hoa Tử Đinh Hương Phụng Vũ Phi Y

  10. #10
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    uh, cảm ơn bạn @yscytd
    cái này mình bít rùi, mấy bạn trước đã giải thích rùi mà.
    Embedded ARM

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

  1. Lập trình C++ Mình muốn hỏi về bài toán tìm số lần xuất hiện của ký tự nhiều nhất trong chuỗi và số lần xuất hiện
    Gửi bởi ducky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 06-09-2013, 11:17 AM
  2. Mảng trên C Chuỗi con xuất hiện vị trí thứ bao nhiêu trong chuỗi mẹ
    Gửi bởi hjepsjga_94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 22-07-2013, 06:49 PM
  3. Bị lỗi dính chuỗi khi nhập xuất chuỗi từ file trong C++?
    Gửi bởi nguyenchikhang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 03-11-2011, 03:13 PM
  4. Turbo C Lỗi Nhập một chuỗi và 1 từ cho biết từ đó xuất hiện trong chuỗi bao nhiêu lần?
    Gửi bởi vietvinhqn1992 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: 17-01-2011, 12:38 PM
  5. Nhập chuỗi, đếm số lần xuất hiện các từ trong chuỗi như thế nào?
    Gửi bởi VizDee trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 23-01-2010, 01:33 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