Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    code cắt bỏ space thừa trong chuỗi. ko hiện thị kết quả và ko hiện thị lỗi

    Đề Bài: Nhập vào 1 câu tiềng việt bất kì sai dấu “cách”(space) in ra màn hình câu chuẩn:
    1: cắt bớt dấu “cách”(space) ở đầu câu.
    2: xóa dấn cách(space) thừa ở giữa các từ.
    3: thêm dấu “ . ” ở cuối câu.
    4: xóa dấu cách(space) trước dấu chấm “.”
    5:nhập nhiều câu tương tự như đề bài

    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <ctype.h>
    #include <iostream.h>
    #include <alloc.h>
    char s[100],s1[100];
    int  i,j;
    void nhap()
    {
        cout<<"nhap xau : ";gets(s);
        for (i = 0 ; i < strlen(s) ; i++) s1[i]=' ';
    }
    void xuly()
    {
        i = 0 ;int kt = 1, ok = 0, dd = 0 ; j = 1 ;
        while ( i < strlen(s) )
          {
            while (s[i] == ' ') i++ ;
            while (s[i] != ' ')
              {
            ok = 0 ;
            if (i == strlen(s)) break;
            if (((s[i]==',') || (s[i]=='?') || (s[i]==':') || (s[i]==';') || (s[i]=='(') || (s[i]==')')) && (ok == 0))
              {
                s1[j] = s[i] ; j++ ; s1[j] = ' '; i++ ; j++ ; ok =1; dd= 1;
              }
            if ((s[i] == '.') && (ok == 0))
              {
                s1[j] = s[i] ; j++ ; s1[j] = ' '; i++ ; j++ ;kt = 1 ; ok = 1 ;
              }
            if (((kt == 1) || (s1[j-1] == ' ') || (j==1)) && (ok == 0) && (dd==0))
              {
                s1[j]=toupper(s[i]); i++ ; j++ ; kt = 0 ; ok = 1 ;
              }
            if (ok == 0)
              {
                s1[j] = tolower(s[i]); i++; j++;ok = 1;dd=0;
              }
              }
            if ((s[i] == ' ') && (s1[j-1] !=' '))
              {
            s1[j] = ' '; i++; j++;
              }
          }
    }
    void main()
    {
        clrscr();
        nhap();
        xuly();
        cout <<"Xau sau khi chuan hoa :
    ";
        puts(s1);
        getch();
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mình cũng mới học thôi , nên xin sửa lại toàn code của bạn ,để bạn tham khảo thôi
    Code mình thỏa toàn bộ yêu cầu đề bài
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    char string[225];
    
    void Xu_ly(char *s)
    {
          int n=strlen(s);
          for(int i=0;i<n;i++)
          {
          	if(s[i]==' '&&s[i+1]==' ') //Su ly 2 dau space lien tiep
             {
                for(int j=i;j<n;j++)
                {	s[j]=s[j+1];
                }
             }
             if(s[i]==' '&&s[i+1]=='.') //Su ly dau space va dau . lien tiep
             {
                for(int j=i;j<n;j++)
                {	s[j]=s[j+1];
                }
             }
          }
          if(s[0]==' ')                  //Su ly dau space dau dong
          {
          	for(int i=0;i<n;i++)
             {	s[i]=s[i+1];
             }
          }
          int k=strlen(s);// Lay lai do dai cua string sau khi xu ly
          s[k]='.';  //Doi gia tri NULL cua cai cuoi thanh ki tu .
          s[k+1]='\0';
    
    }
    void main()
    {
          printf("Nhap chuoi:");
          gets(string);
          Xu_ly(string);
          printf("Chuoi sau khi chinh sua:%s",string);
          getch();
    }

  3. #3
    Mình chỉnh lại, chỉ cần duyệt qua 1 lần là xong. Giảm thời gian nhưng cần thêm bộ nhớ vì dùng biến tạm

    Mã:
    #include <stdio.h>#include <conio.h>#include <string.h> void chuanHoa(char *s){    int n=strlen(s);    int i=0;    int j=0;    char *str=new char[n];    while(s[i]==' ') i++;   //bo dau cach dau dong    for( ; i < n ; i++)    {        if(s[i]!=' '||(s[i]==' '&&s[i+1]!=' '&&s[i+1]!='.')) //chuan hoa        {            str[j++]=s[i];        }    }    str[j]='.'; //them dau '.' cuoi dong    str[j+1]='\0';  //ki tu ket thuc chuoi    strcpy(s,str);    delete(str);}void main(){    clrscr();    char string[255];     printf("Nhap chuoi: ");    gets(string);    chuanHoa(string);    printf("Chuoi sau khi chinh sua: %s",string);    getch();}

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi One_Two_Three
    mình cũng mới học thôi , nên xin sửa lại toàn code của bạn ,để bạn tham khảo thôi
    Code mình thỏa toàn bộ yêu cầu đề bài
    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    char string[225];
    
    void Xu_ly(char *s)
    {
          int n=strlen(s);
          for(int i=0;i<n;i++)
          {
          	if(s[i]==' '&&s[i+1]==' ') //Su ly 2 dau space lien tiep
             {
                for(int j=i;j<n;j++)
                {	s[j]=s[j+1];
                }
             }
             if(s[i]==' '&&s[i+1]=='.') //Su ly dau space va dau . lien tiep
             {
                for(int j=i;j<n;j++)
                {	s[j]=s[j+1];
                }
             }
          }
          if(s[0]==' ')                  //Su ly dau space dau dong
          {
          	for(int i=0;i<n;i++)
             {	s[i]=s[i+1];
             }
          }
          int k=strlen(s);// Lay lai do dai cua string sau khi xu ly
          s[k]='.';  //Doi gia tri NULL cua cai cuoi thanh ki tu .
          s[k+1]='\0';
    
    }
    void main()
    {
          printf("Nhap chuoi:");
          gets(string);
          Xu_ly(string);
          printf("Chuoi sau khi chinh sua:%s",string);
          getch();
    }
    bạn ơi , code của bạn mình thấy có vấn đề là nếu giữa 2 từ có nhiều space thì nó không thể xóa hết space và chừa lại chỉ 1 space duy nhất giữa 2 từ

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •