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

Đề tài: cho mình hỏi về chuỗi

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

    Smile cho mình hỏi về chuỗi

    kết quả 2 cái này khác nhau chuoi="Nguyen Van Xuan" vt nhập từ bàn phím
    1
    Code:
    puts(strcpy(&chuoi[vt-1],&chuoi[vt]));
    2
    Code:
    strcpy(&chuoi[vt-1],&chuoi[vt]);
    puts(chuoi);
    code 1 nó chỉ viết ra phần copy từ chuỗi vt mà thôi
    còn code 2 nó sẽ xóa kí tự mà mình muốn xóa bằng cách copy phần tử tiếp theo của chuỗi lên vị trí cần xóa...tại sao lại có sự khác nhau đó?
    trả lời hộ mình với thanks nha

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Cả 2 cách đều như nhau cả, chỉ khác nhau là in trước hay sau mà thôi. Hàm strcpy sẽ trả về địa chỉ của chuỗi đích( xem help về hàm strcpy ). Trong cả 2 trường hợp trên thì chuỗi nguồn và đích cũng từ một chuỗi gốc mà ra nên chuỗi gốc chắc chắn bị thay đổi.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    07 2008
    Bài viết
    30

    ưh hiểu rùi cho mình hỏi thêm cái này nha
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    void main()
    {
        char *nguon;
        char dich[100],kytu;
        int m;
        clrscr();
        nguon="khac ngoc thanh";
        printf("\n\nC0PY");
        strncpy(dich,nguon,10);
        dich[strlen(dich)]='\0';
        puts(dich);
        printf("noi dung %s    %d",dich,strlen(dich));
        printf("\n");
        printf("\n CHU HOA\n");
        puts(strupr(nguon));
        printf("\n\n\nCHU THUONG\n");
        puts(strlwr(nguon));
        printf("\n\n\nXoa Ki tu");
        printf("\n nhap vi tri muon xoa");
        scanf("%d",&m);
        strcpy(&nguon[m-1],&nguon[m]);
        printf("\n%s",nguon);
    
    
        printf("\n\n\n\n TRICH CHUOI\n");
        printf("\n\n+Ban muon trich tu ki tu nao ");
        scanf("%c",&kytu);
        printf("%s",(strchr(nguon,kytu)));
    getch();
    }
    phần in đậm phía trên nếu như xóa đi không xài thì in đậm phía dưới đúng...Phần in đậm phía trên thì cũng chỉ là xóa kí tự trong chuỗi thôi...vậy mà đến phần trích chuỗi..nhập vào kí tự ("%c",kytu) thì nó không chạy đổi thành %s mới đúng....tóm lại tại sao không có phần xóa kí tự thì kết quả nhập kytu vẫn chạy ngon..còn khi mà xóa phần tử thì đến phần trích chuỗi hko thể nhập kytu bằng %c

    chủ yếu ở cái dòng scanf("%d",&m); nếu mà không có dòng đó thì trích chuối hko vấn đề gì...nhưng mà có dòng đó dù ta không thực hiện xóa ký tự trong chuỗi strcpy(&nguon[m-1],&nguon[m]); thì hàm scanf("%c",&kytu);
    printf("%s",(strchr(nguon,kytu)));
    vẫn không thực hiện đc...please tell me Why?

    có ai giúp mình với cám ơn..hay cho mình ý kiến cũng dc
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 17-10-2008 lúc 10:19 PM.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Lỗi sinh ra là do chuỗi nguon là nằm trong vùng nhớ hằng ( nằm chung vùng code ) nên ko ghi được, nếu trong dos thì bị crash, còn trong win thì bào access violation.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

    cho mình hỏi thêm bài này nữa..đây là bài so sánh và sắp xếp
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<alloc.h>
    void main()
    {
    	char *tam,*p[]={"Bo","Oi","Bo","Gian","Anh","Phai","Ko","Anh","Nho"
    			,"Bo","Nhju","Lam"};
    	int i,j;
    	clrscr();
    	tam=(char*)calloc(5,sizeof(char));
    	for(i=0;i<11;i++)
    		for(j=i+1;j<12;j++)
    			if (strcmp(p[i],p[j])>0)
    			{
    				tam=p[i];
    				p[i]=p[j];
    				p[j]=tam;
    			}
                  //  1.
    	for(i=1;i<12;i++)
    		printf("\n%s\n",p[i]);
    	free(tam);
    getch();
    }
    mình free(tam) thế này thì kết quả đúng...nhưng khi chuyển free(tam) lên trên chỗ //1 thì kết quả nó ra chuỗi cuối cùng là ký tự lạ..tại sao vậy..sau khi thực hiện xong nổi bọt...thì đã sắp xếp xong rùi..đáng lẽ khi đó mình free(tam) cũng đc chứ...tại sao nó lại sai...giải thích hộ mình với thanks

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định cho mình hỏi về chuỗi

    C++ Code:
    1. /* sai từ chỗ này trở đi, biến chuỗi ko thể gán như số được, phải dùng hàm strcpy. Khi hủy tam thì chuỗi hằng bị phá -> phá vào code -> lại crash. */
    2. if (strcmp(p[i],p[j])>0)
    3. {
    4.    tam=p[i];
    5.    p[i]=p[j];
    6.    p[j]=tam;
    7. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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