Quay lại   Cộng đồng C Việt > LẬP TRÌNH C++ | LẬP TRÌNH C | LẬP TRÌNH C++0X > Thắc mắc lập trình C/C++/C++0x

Trả lời
 
Các công cụ đề tài Các chế độ hiển thị
  #1  
Cũ 31-03-2008, 04:54 PM
No Avatar
duc30121989 duc30121989 là offline
Thành viên mới
 
Ngày gia nhập: 02 2008
Bài viết: 28
Mặc định

Bài tập tách từ trong xâu, s1[i]='\0' nghĩa là gì?


#include<stdio.h>
#include<conio.h>
#include<string.h>

void main()
{
clrscr();
char s[81],s1[81],i,d,v;
printf("Nhap vao mot chuoi ky tu:");
fflush(stdin);
gets(s);
printf("Chuoi vua nhap vao la:");
puts(s);

v=0;
while(s[v]==' ') v+=1;
d=v;
while(s[d]!=' ') d+=1;
    for(i=0;i<d-v;i++)
    s1[i]=s[v+i];
    s1[i]='\0'; //chua hieu dong nay
printf("Tu vua duoc tach:");
puts(s1);
getch();
}

Em làm đoạn code này để tách từ đầu câu.Cái chỗ em không hiểu đã ghi trong đoạn code đó. Theo em chỗ đó phải là s1[i+1]='\0' bởi theo dòng trên
s1[i]=s[v+i] tức là vị trí s1[i] đã được ghi ký tự của vị trí s[v+i]. Thế nên kí tự \0 phải chèn vào vị trí s[i+1] để kết thúc xâu mới. Nhưng thay vào thử thì thấy sai trong khi cái cũ là s[i]='\0' thì lại thấy đúng. Chẳng hiểu gì cả. Các bác chỉ giúp với.
Trả lời cùng với trích dẫn
  #2  
Cũ 31-03-2008, 08:43 PM
No Avatar
AlexF AlexF là offline
Banned
 
Ngày gia nhập: 02 2008
Bài viết: 1,010
Mặc định

Trích dẫn:
Em làm đoạn code này để tách từ đầu câu
nlois thât là tớ chẳng hiểu đề bài là gì nữa...thía mà bạn hỏi bọn tớ thuật toán sai chỗ nào...chịu thui bạn ơi...ghi rõ đề bài đi....tớ sẽ xem thuật toán

Trích dẫn:
heo em chỗ đó phải là s1[i+1]='\0' bởi theo dòng trên
s1[i]=s[v+i] tức là vị trí s1[i] đã được ghi ký tự của vị trí s[v+i]. Thế nên kí tự \0 phải chèn vào vị trí s[i+1] để kết thúc xâu mới. Nhưng thay vào thử thì thấy sai trong khi cái cũ là s[i]='\0' thì lại thấy đúng
Trả lời cùng với trích dẫn
  #3  
Cũ 01-04-2008, 05:04 PM
No Avatar
duc30121989 duc30121989 là offline
Thành viên mới
 
Ngày gia nhập: 02 2008
Bài viết: 28
Mặc định

Sorry quên mất, đề bài chỉ là tách từ đầu tiên trong xâu và in ra thôi mà. Ví dụ viết vào xâu là:
Toi di hoc.
hoặc là
Toi di hoc.
(có dấu cách đặt lung tung)
thì in ra từ được tách là toi.

Đã được chỉnh sửa lần cuối bởi duc30121989 : 01-04-2008 lúc 05:07 PM.
Trả lời cùng với trích dẫn
  #4  
Cũ 01-04-2008, 05:34 PM
Avatar của hacker_mubaohiem
hacker_mubaohiem hacker_mubaohiem là offline
Thành viên chính thức
 
Ngày gia nhập: 03 2008
Bài viết: 78
Mặc định

Try this!
void xoakytu(char str[100],int vitri)
{
    int n=strlen(str);
    for(int i=vitri;i<n;i++)
    {
        str[i]=str[i+1];
    }
   
}

void xoakhoangtrangdauchuoi(char str[100])
{
    int k=0;
    while(str[k]==32)
    {
        xoakytu(str,k);
    }
}

void InTuDauTien(char s[])
{
    char str[]="";
    int i=0;
    while (s[i]!=32)
    {
        str[i++] = s[i++];
    }
    printf("%s",str);
}

- Theo mình trong bài làm nên chia chương trình thành các hàm khác nhau cho sáng sủa.Bạn cũng có thể tận dụng nó trong các bài tập chuỗi khác cũng đc!
__________________
No way, No success..
Trả lời cùng với trích dẫn
  #5  
Cũ 03-04-2008, 02:46 AM
Avatar của gaiavn
gaiavn gaiavn là offline
Thành viên mới
 
Ngày gia nhập: 04 2008
Bài viết: 2
Mặc định

đó là do vòng lặp for đấy bạn ạ!
câu lệnh s1[i]=s[v+i] (*)nằm trong vòng lặp, nó được thực hiện lần cuối khi i=(d-v-1).
sau đó theo thứ tự vòng lặp for, i++ và thế là i=(d-v), vòng lặp dừng ở đó.
tức là trong câu lệnh s1[i]='\0' thì i=(d-v) rồi
Trả lời cùng với trích dẫn
  #6  
Cũ 24-03-2012, 05:32 PM
No Avatar
leminhquanbkhn92 leminhquanbkhn92 là offline
Thành viên mới
 
Ngày gia nhập: 02 2012
Bài viết: 2
Mặc định

Day la code tach tung tu ma ban can!!!!!^_^


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef struct text
{
        char word[50];
        struct text *next;
        }ts;
ts numword[100];
char dong[50][50];
char a[2500];
//ham xoa khoang trang o dau
void xoa_cach_dau(char *s)
{
    while(s[0]==32)strcpy(s,&s[1]);
                   }
//ham xoa khoang trang o cuoi
void xoa_cach_cuoi(char *s)
{
     while(s[strlen(s)-1]==32)s[strlen(s)-1]='\0';
                   }
//ham xoa khoang trong giua
void xoa_cach_giua(char *s)
{
     int i,j;
     for (int i=0; i<strlen(s)-1; i++)
        if (s[i]==32&&s[i+1]==32)
           {
                            for (int j=i+1; j<strlen(s)-1; j++) s[j]=s[j+1];
                            s[strlen(s)-1]='\0';
                            i--;
           
           }
}
//ham dua tung tu cua van ban va tra lai so tu trong van ban
int tach_tu(char *s)
{
     char *t;
     int i,j=0,m=0;
     for(i=0;i<strlen(s);i++)
     {
     if(s[i]!=32)
     {
                 numword[m].word[j]=s[i];
                 j++;
                 }else
                 {
                       j=0;
                       m++;
                       }
     }
       return m+1;          

}
main()
{
      int i,n;
      printf("\n Nhap van ban:\n");
      gets(a);
      xoa_cach_dau(a);
      xoa_cach_giua(a);
      xoa_cach_cuoi(a);
      tach_tu(a);
      printf("\n Van ban dinh chuan hoa la:\n%");
      for(i=0;i<tach_tu(a);i++)
      {
                               printf("\n");
                               puts(numword[i].word);
                               }
      getch();
      }

Đã được chỉnh sửa lần cuối bởi leminhquanbkhn92 : 24-03-2012 lúc 06:43 PM.
Trả lời cùng với trích dẫn
Trả lời
Google
 

Bookmarks

Các công cụ đề tài
Các chế độ hiển thị

Các nguyên tắc gửi bài
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

[IMG] code: On
HTML code: Off

Nhảy tới diễn đàn


Toàn bộ thời gian tính theo múi GMT +7. Bây giờ là 10:25 AM.