Trang 1 trên tổng số 6 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 51 kết quả

Đề tài: In xâu đảo ngược

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định In xâu đảo ngược

    Bài Toán:Viết chương trình nhập vào 1 xâu s và in đảo ngược các từ trong xâu
    Ví dụ: Nhập “Chó cắn mèo” thì in ra “Mèo cắn chó”

    Các bạn hướng dẫn giúp mình phưong pháp giải nhé

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

    dùng đệ quy , đảo các từ , các từ được phan biệt bởi khoảng trắng , chạy đến khoảng trắng thì in ra , nhưng do là đệ quy nên in ngược
    Em có thấy nắng vàng kỷ niệm
    Hạ ngồi ru thanh thản những môi cười
    Thuở ngồi ngóng tay choàng tay nỗi nhớ
    Vin tay vào tháng năm chơi vơi...

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    Code:
    #include<iostream.h>
    #include<string.h>
    #include<stdlib.h>
    using namespace std;
    char *cat(char chuoi[2000],int dau,int cuoi);
    int demtu(char a[2000]);
    void xoakhoangtrang(char s[2000]);
    void gan(char chuoi[2000],char xau[100][2000],int sochu);
    char *cat(char chuoi[2000],int dau,int cuoi)
    {
        char suli[2000];
        int j=0;
        for(int i=0;i<cuoi-dau;i++)
        {
                suli[i]=chuoi[i+dau];
        }
        return suli;
    }
    void xoakhoangtrang(char s[2000])
    {
        int n=strlen(s);
        for(int i=0;i<n;i++)
        {
            if((s[i]==' ')&&(s[i+1]==' '))
            {
                int j;
                for( j=i;j<n;j++)
                {
                    s[j]=s[j+1];
                }
                i--;
            }
        }
    }
    int demtu(char a[2000])
    {
        xoakhoangtrang(a);
        int dem=0;
        for(int i=0;i<strlen(a);i++)
        {
            if( a[i]==' ')
            dem++;
        }
        return dem+1;
    }
    void gan(char chuoi[2000],char xau[100][2000],int sochu)
    {
        int sotu=demtu(chuoi),dung,k=2,dungi;
        xoakhoangtrang(chuoi);
        for(int i=0;i<sochu;i++)
        {
            if(chuoi[i]==' ')
            {
                     dungi=i;
                     for(int j=dungi+1;j<sochu;j++)
                     {
                         if(chuoi[j]==' ')
                         {
                             dung=j;
                             strcpy (xau[k],cat(chuoi,dungi+1,dung));
                             k++;
                             break;
                         }
                         else if(chuoi[j+1]==NULL)
                         {
                            dung=j;
                            strcpy (xau[k],cat(chuoi,dungi+1,dung+1));
                            k++;
                            break;
                         }
                     }
            }
        }
        char *x=strtok(chuoi," ");
        strcpy(xau[1],x);
        for(int j=1;j<=sotu;j++)
        {
            cout<<"\nTU THU: "<<j<<" LA: "<<xau[j];
        }
        cout<<"\n\n\n";
    }
    int main()
    {
        char chuoi[2000],xau[100][2000];
        cout<<"NHAP CHUOI:";
        cin.getline(chuoi,2000,'\n');
        int sochu=strlen(chuoi);
        gan(chuoi,xau,sochu);
    
        return 0;
    }
    gán được chuỗi lên mảng rồi thao tác với mảng là được,đảo trên mảng thì chắc cậu biết làm nhỉ

  4. #4
    No Avatar
    ngocbig Khách

    oái! bác làm dài thế.

    Của em nè:
    C Code:
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <stdlib.h>
    4.  
    5.  
    6. int main()
    7. {
    8.     char str[100];
    9.     printf("Input string:");
    10.     gets(str); 
    11.  
    12.     //Mảng các từ (10 từ)được tách ra từ chuỗi.
    13.     char* words[10];
    14.     int i;
    15.     //Cấp phát bộ nhớ cho mỗi từ như mảng
    16.     //mỗi từ lớn nhất 9 kí tự
    17.     for (i=0;i<10;i++)
    18.         words[i] = (char*)malloc(10*sizeof(char));
    19.  
    20.     i=0;
    21.     int count;//số từ có trong mảng
    22.  
    23.     //tiến hành tách từng từ   
    24.     char* tok = strtok(str," ");   
    25.     while(tok!=NULL&&i<10)
    26.     {
    27.         strcpy(words[i],tok);
    28.         tok = strtok(NULL," ");
    29.         i++;
    30.     }
    31.     count =(i);//số từ lấy đc
    32.  
    33.     //in ngược từ mảng các từ
    34.     for(i=(count-1);i>=0;i--)
    35.         printf("%s ",words[i]);
    36.     printf("\n");
    37.     //giải phóng bộ nhớ
    38.     for (i=0;i<10;i++)
    39.     {
    40.         free(words[i]);
    41.     }
    42.    
    43. }

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    336

    hướng dẫn mà các bác quăng hết code vào thì ....
    Thôi thì chủ topic làm xong tự làm thêm phần này cho hiểu nhé:
    Input:"<3 dấu cách>Bai tap<2 dấu cách>nho nho<4 dấu cách>"
    Output:"<4 dấu cách>nho nho<2 dấu cách>tap Bai<3 dấu cách>"
    code ra gió bão

  6. #6
    No Avatar
    ngocbig Khách

    Mặc định In xâu đảo ngược

    Input:"<3 dấu cách>Bai tap<2 dấu cách>nho nho<4 dấu cách>"
    Thử thế này thì bài của coder_gate chắc sẽ tính nhầm.

    PS: mà đây là bài về C mà coder_gate. Nếu bạn ấy chỉ chạy bằng C compiler thì chít.
    Đã được chỉnh sửa lần cuối bởi ngocbig : 11-01-2009 lúc 12:53 PM.

  7. #7
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    bài này đếm từng từ,xóa khoảng trắng chắc là được,có hàm này strtok

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    hướng dẫn mà các bác quăng hết code vào thì ....
    Thôi thì chủ topic làm xong tự làm thêm phần này cho hiểu nhé:
    Input:"<3 dấu cách>Bai tap<2 dấu cách>nho nho<4 dấu cách>"
    Output:"<4 dấu cách>nho nho<2 dấu cách>tap Bai<3 dấu cách>"
    mình có code đâu ,mình ném cái bài mình làm lâu lâu rồi,nó để gán từ lên mảng chứ không phải mỗi để đảo từ,nhưng làm được nhiều việc,nếu bác thích làm bài toán sửa từ hay thay từ thì cũng nhanh

    PS: mà đây là bài về C mà coder_gate. Nếu bạn ấy chỉ chạy bằng C compiler thì chít.
    hí hí,mình cũng không đi code hộ mà ,chỉ ném code cũ lên,nếu không đúng ý thì sử lý thêm chút ít là được thoai
    Thử thế này thì bài của coder_gate chắc sẽ tính nhầm.
    kết quả cậu cũng giống tớ mà
    Đã được chỉnh sửa lần cuối bởi AlexF : 11-01-2009 lúc 02:22 PM.

  9. #9
    No Avatar
    ngocbig Khách

    kết quả cậu cũng giống tớ mà
    Ý bạn là sao? Chẳng nhẽ các bạn muốn giữ và đảo cả số kí tự "space"?

  10. #10
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Code của ngocbich vẫn code dài và chậm, các bạn thử chỉ dùng 1 vòng for thôi. Tip: gán '\0' char vào space và printf ra, duyệt ngược từ sau ra trước.

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