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

Đề tài: Về chuỗi kí tự

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

    Mặc định Về chuỗi kí tự

    Cách huynh giúp em với.Ví dụ cho chuỗi "ta la ma"
    viết hàm in ngược lại chuỗi trên tức là "ma la ta"
    Ai có thể chỉ cho em với được không.Em xin cảm ơn.

  2. #2
    No Avatar
    ngocbig Khách

    Có ít nhất 2 cách giải quyết việc này. Mình xin góp ý với bạn một cách như sau. Chắc bạn biết chuỗi trên về bản chất là một mảng các ký tự, do đó bạn hãy chạy một vòng lặp để gán ngược nó sang một mảng char khác là ok. Chú ý ký tự null nhé.

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Cách huynh giúp em với.Ví dụ cho chuỗi "ta la ma"
    viết hàm in ngược lại chuỗi trên tức là "ma la ta"
    Ai có thể chỉ cho em với được không.Em xin cảm ơn.
    Có thể ngocbig hiểu nhầm ý đầu bài.

    Vấn theo hướng như của ngocbig đã nói, bạn đọc ngược tách từng chữ vào một chuỗi tạm tmp rồi cộng nó vào chuỗi mới, TH là kí tự trắng thì cộng luôn vào chuỗi mới.

    Mà ở C cộng chuỗi thì có thể dùng hàm strcat() xem chi tiết tại đây

    Bạn cứ thử làm xem, còn khúc mắc thì đưa lên đây trao đổi tiếp.

    *Edit: ah không, bạn tham khảo hàm này thì hay hơn nè strtok
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 22-12-2008 lúc 12:41 PM.

  4. #4
    No Avatar
    ngocbig Khách

    Đúng là mình chưa đọc kỹ thật. Mình hiểu nhầm ý bạn ấy rồi
    Ngàn lần sorry

    Làm theo QuangHoang là dễ nhất rồi.

    Regards

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Mình có 1 ý tưởng lằng nhằng và phức tạp. hy vọng bạn không chê. Đó là mình phân tích chuỗi đưa vào qua đó sẽ có 1 cái nhìn tổng quan về chỗi. kết quả sẽ được lưu 1 cách quy mô. qua đó bạn có thể làm nhiều điều bạn muốn :

    mình sẽ phân tích chuỗi đưa vào và đưa kết qua phân tích sơ bộ qua 1 mảng :

    + phần tử đầu tiên : thứ 0 của mảng sẽ lưu số kí tự trắng đầu tiên của chuỗi
    ví dụ : " H" thì phần tử đầu tiên là 2

    + phần tử tiếp theo : thứ 1 của mảng sẽ lưu số kí tự trắng ở cuối xâu.
    ví dụ : " abc " thì mang[1]=2

    + phần tử mang[2] : sẽ lưu số từ của xâu đó .
    ví dụ : " he he he he he " thì mang[2] =5;

    + các phần tử tiếp theo sẽ lần lượt lưu thông tin về các từ trong chuỗi :

    mang[3] lưu thông tin từ thứ 1 .
    mang[4] lưu thông tin từ thứ 2 .
    mang[5] lưu thông tin từ thứ 3 .
    ........
    cách lưu như sau :
    mang[x]= vịtrícủatừ * 1000 + độdàicủatừ

    ....

    qua quy ước đó ta sẽ dễ dàng sử dụng chuỗi theo ý muốn



    code thử nha : sai chỗ nào mong được chi bảo
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <ctype.h>
    #include <stdlib.h>

    char strlen(char *xau)
        {
            
    int i=0;
            while (
    xau[i]!=NULLi++;
            return 
    i;
        }
    void phantich(char *xau,int *mang)
        {
            
    int i=0,k=0,l=0,j,m=3;

            while (
    xau[i++]==' 'k++;  //dem so dau cach dau mang
            
    mang[0]=k;                  //mang tai 0 se luu so dau cach dau mang

            
    i=strlen(xau)-1;
            while (
    xau[i--]==' 'l++; // dem so dau cach cuoi mang
            
    mang[1]=l;               //mang tai 1 se luu so dau cach cuoi mang
            
    mang[2]=0;                 // mang tai 2 se luu so tu cua chuoi



            
    for (i=k;i<strlen(xau)-l;i++)
                {
                    if (
    xau[i]!=' ')
                        {
                            
    mang[2]++;   // mang tai 2 se luu so tu cua chuoi
                            
    j=i;
                            while (
    xau[j]!=' 'j++;
                            
    mang[m++]=i*1000 + (j-i); // bat dau tu phan tu thu 3 tro di se luu vitri cua tu va dodai cua tu theo cong thuc : vitri*1000 + soluong
                                            // vi tri nay la vi tri trong xau cua ki tu
                            
    i=j;
                        }
                }

        }


    void vandecuaban(char *xau,int *mang)
        {
            
    int i,j;
            for (
    i=1;i<mang[1];i++) printf(" ");

            for (
    i=mang[2]-1;i>=0;i--)
                {
                    
    int vitri,soluong;
                    
    vitri=mang[3+i] / 1000;
                    
    soluongmang[3+i]%1000;
                    for (
    j=vitri;j<vitri+soluong;j++)
                        
    printf("%c",xau[j]);
                    
    printf(" ");
                }




            for (
    i=0;i<mang[0]-1;i++) printf(" ");

        }


    void main(void)

        {
            
    clrscr();
            
    char *p=" Hello ngay moi  ";
            
    int ketqua[20];
            
    phantich(p,ketqua);

            
    vandecuaban(p,ketqua);


            
    getch();
        } 
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Mặc định Về chuỗi kí tự

    Dùng hàm strtok như QuangHoang là cách hay nhất rồi . Mình dùng một cách rất nông dân như sau bạn có thể tham khảo :
    C Code:
    1. #include <stdio.h>
    2. #define MAXLENGTH 100
    3.  
    4. void split(char *s,char sub[][MAXLENGTH],int* length) {
    5.     int i = 0, j;
    6.     while (*s != '\0') {
    7.         while (*s == ' ') s++;
    8.         j = 0;
    9.         while (*s != ' ' && *s != '\0') {
    10.             sub[i][j++] = *s;
    11.             s++;
    12.         }
    13.         sub[i][j] = '\0';
    14.         i++;
    15.     }
    16.     *length = i;
    17. }
    18. int main() {
    19.     int length,i;
    20.     char *s = "ta la ma";
    21.     char sub[MAXLENGTH][MAXLENGTH];
    22.     split(s,sub,&length);
    23.     printf("String before rev: %s\n",s);
    24.     printf("After rev:");
    25.     for (i = length - 1;i >= 0;i--)
    26.         printf("%s ",sub[i]);
    27.     putchar('\n');
    28.     return 0;
    29. }
    I'm superman

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

  1. Bài tập C++ Cách để so sánh 2 chuỗi kí tự giữa chuỗi nhập từ phím và chuỗi từ file xem có giống nhau không?
    Gửi bởi davilson18 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 09-06-2012, 09:47 AM
  2. Lập trình C Thay thế chuỗi s1 trong chuỗi s bằng chuỗi s
    Gửi bởi duytue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 23-09-2011, 04:16 PM
  3. thay thế chuỗi con thứ i trong chuỗi mẹ bằng 1 chuỗi khác
    Gửi bởi nhat1811 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: 06-08-2011, 08:25 AM
  4. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  5. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 AM

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