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

Đề tài: Chuổi kô biết sai chổ nào cả

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

    Mặc định Chuổi kô biết sai chổ nào cả

    Bạn mình send code này qua cho mình kêu mình tìm lổi dùm. Chạy vẫn ngon lành nhưng khi nhấm phím 0 để thoát khỏi chương trình thì nó mới báo lổi thế mới ác kô cơ chứ, xin các bạn chỉ dùm, lổi nằm ở case 5 đó, vì khi sử dụng case 5 nó mới sai
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    //truy xuat chuoi con dua vao cac ki tu dac biet nhu khoang trang
    char *xuat_dacbiet(char *&c1)
    {
    	int n,vitri,i=0,j,v=0,dem=1;
    	char *c2;
    	n=strlen(c1);
    	c2=new char[n];
    	printf("\nmuon truy xuat tu thu may: ");
    	scanf("%d",&vitri);
    	if(vitri==1)
    	  {
    		do
    		{
    			c2[v++]=c1[i++];
    		}while(c1[i]!=' ');
    	  }
    	else
    	{   do
    		{
    			if(c1[i++]==' ')
    				dem++;
    		}while(dem!=vitri);
    		for(j=i;c1[j]!=' ';j++)
    			c2[v++]=c1[j];
    	}
    	c2[v]='\0';
    	return c2;
    }
    
    //dao nguoc 1 chuoi -->chuoi dao nguoc se bi vo nghia
    char *dao_chuoi(char *&c1)
    {
    	char *c2;
    	int k=0;
    	int n=strlen(c1);
    	c2=new char[n];
    
    	for(int i=n-1;i>=0;i--)
    		c2[k++]=c1[i];
    	c2[k]='\0';
    	return c2;
    }
    
    //dao nguoc 1 chuoi---> chuoi dao nguoc van co nghia
    char *dao_nghia(char *&c1)
    {
    	char *c2;
    	int n=strlen(c1);
    	int i=n,k=0;
    	c2=new char[n];
    
    	while(i>=0)
    	{
    		if(c1[i]==' ')
    		{
    			int t=i;
    			for(int l=t;c1[t]!=' ';l++)
    				c2[k++]=c1[l];
    		}
    		i--;
    	}
    	c2[k]='\0';
    	return c2;
    }
    
    //dem so tu trong 1 chuoi
    int dem_tu(char *&c1)
    {
    	int dem=0,i=0;
    	while(c1[i]!='\0')
    	{
    		if(c1[i++]==' ')
    			dem++;
    	}
    	dem++;
    	return dem;
    }
    
    //ham chen 1 chuoi con khac vao chuoi ban dau
    void chen_chuoi(char *&c1)
    {
    	char *c2, *chuoimoi;
    	int i=0,a=0,j=0,n1,n2,vitri;
    	printf("\nnhap chuoi con can chen: ");
    	fflush(stdin);
    	gets(c2);
    	printf("\nnhap vi tri can chen: ");
    	scanf("%d",&vitri);
    	n1=strlen(c1);
    	n2=strlen(c2);
    	chuoimoi=new char[n1+n2-1];
    
    	while(i<vitri)
    	{
    		chuoimoi[a++]=c1[i++];
    	}
    
    	while(c2[j]!='\0')
    	{
    		chuoimoi[a++]=c2[j++];
    	}
    
    	while(c1[i]!='\0')
    	{
    		chuoimoi[a++]=c1[i++];
    	}
    
    	chuoimoi[a]='\0';
    	printf("\nchuoi moi la: ");
    	fflush(stdin);
    	puts(chuoimoi);
    }
    
    //kiem tra tinh doi xung cua chuoi
    int doi_xung(char *&c1)
    {
    	int n=strlen(c1);
    	int i;
    	for(i=0;i<=(n-1)/2;i++)
    	{
    		if(c1[i]!=c1[n-1-i])
    			return 0;
    	}
    	return 1;
    }
    
    //tim kiem vi tri 1 chuoi con trong chuoi ban dau
    int bruteforce(char *&c1, char *&c2)
    {
    	int aa,bb,i,j;
    	aa=strlen(c1);
    	bb=strlen(c2);
    
    	i=aa-1,j=bb-1;
    
    	while(i>=0&&j>=0)
    	{
    		if(c1[i]==c2[j])
    			i--,j--;
    		else
    		{
    			i=i+(bb-j)-2,j=bb-1;
    		}
    	}
    	if(j<0)
    		return ++i;
    	return -1;
    }
    
    //thay the 1 chuoi con thanh 1 chuoi con khac
    void thay_chuoi(char *&c1)
    {
    	char *c2, *c3;
    	int vitri,i,j;
    	printf("ban muon doi chuoi con nao ?: ");
    	fflush(stdin);
    	gets(c2);
    	puts(c2);
    
    	vitri=bruteforce(c1,c2);
    
    	if(vitri==-1)
    		printf("\nko ton tai chuoi con muon doi");
    	else
    	{
    		printf("\nnhap chuoi con moi de the vao: ");
    		fflush(stdin);
    		gets(c3);
    		puts(c3);
    		if(strlen(c2)!=strlen(c3))
    			printf("\nchieu dai chuoi moi ko hop le");
    		else
    		{
    			printf("\nchuoi duoc thay moi la: ");
    			j=0;
    			for(i=vitri;c3[j]!='\0';i++)
    				c1[i]=c3[j++];
    
    			fflush(stdin);
    			puts(c1);
    		}
    	}
    }
    
    //ham chinh
    void main()
    {
    	char *c1,*c2;
    	int chucnang;
    	clrscr();
    	do{
    		printf("\n\n-----------------");
    		printf("\n|VAN DE VE CHUOI|");
    		printf("\n-----------------");
    
    		printf("\n\nnhap chuoi bat ky: ");
    		c1="\ntruong Mac Dinh Chi danh tieng";
    		//fflush(stdin);
    		//gets(c1);
    		puts(c1);
    
    		printf("\n\nchuc nang: ");
    		printf("\n 1: trich 1 tu trong chuoi");
    		printf("\n 2: dao nguoc chuoi ---> chuoi dao nguoc hoan toan");
    		printf("\n 3: dao nguoc chuoi -->y nghia cua cau bi dao");
    		printf("\n 4: dem so tu trong chuoi");
    		printf("\n 5: chen chuoi con vao chuoi ban dau");
    		printf("\n 6: kiem tra tinh doi xung cua chuoi");
    		printf("\n 7: thay the 1 chuoi con bang 1 chuoi con khac");
    
    		printf("\nnhap chuc nang ban chon vao: ");
    		scanf("%d",&chucnang);
    
    		switch(chucnang)
    		{
    		case 1:
    			c2=xuat_dacbiet(c1);
    			puts(c2);
    			break;
    		case 2:
    			printf("chuoi dao nguoc hoan toan: ");
    			c2=dao_chuoi(c1);
    			puts(c2);
    			break;
    		case 3:
    			printf("\nchuoi dao nguoc y nghia la: ");
    			c2=dao_nghia(c1);
    			puts(c2);
    			break;
    		case 4:
    			printf("so tu co trong chuo la: %d",dem_tu(c1));
    			break;
    		case 5:
    			chen_chuoi(c1);
    			break;
    		case 6:
    			if(doi_xung(c1))		printf("chuoi nay doi xung");
    			else				printf("chuoi nay ko doi xung");
    			break;
    		case 7:
    			thay_chuoi(c1);
    			break;
    		default:
    			chucnang=0;
    			break;
    		}
    		delete c2;
    	}while(chucnang!=0);
      getch();
    }
    Đã được chỉnh sửa lần cuối bởi atuan1989 : 18-04-2008 lúc 08:46 PM.

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

    Visual C++ Code:
    1. delete c2;
    Cái này ở cuối làm gì vậy. Quẳng nó đi xem thế nào. Mình đang fix lỗi chương trình không rỗi build thử đâu.

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    C Code:
    1. void chen_chuoi(char *&c1)
    2. {
    3.     char *c2, *chuoimoi;
    4.     int i=0,a=0,j=0,n1,n2,vitri;
    5.     printf("\nnhap chuoi con can chen: ");
    6.     fflush(stdin);
    7.     gets(c2);
    8.     printf("\nnhap vi tri can chen: ");
    9.     scanf("%d",&vitri);
    10.     n1=strlen(c1);
    11.     n2=strlen(c2);
    12.     chuoimoi=new char[n1+n2-1];
    13.  
    14.     while(i<vitri)
    15.     {
    16.         chuoimoi[a++]=c1[i++];
    17.     }
    18.  
    19.     while(c2[j]!='\0')
    20.     {
    21.         chuoimoi[a++]=c2[j++];
    22.     }
    23.  
    24.     while(c1[i]!='\0')
    25.     {
    26.         chuoimoi[a++]=c1[i++];
    27.     }
    28.  
    29.     chuoimoi[a]='\0';
    30.     printf("\nchuoi moi la: ");
    31.     fflush(stdin);
    32.     puts(chuoimoi);
    33. }

    Sao con trỏ c2 ko được cấp phát bộ nhớ vậy? Bạn mà làm vậy thế nào tí nữa thoát ra khỏi chương trình cũng báo lỗi liên quan đến bộ nhớ cho xem.

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    char *c2, *chuoimoi;
    int i=0,a=0,j=0,n1,n2,vitri;
    printf("\nnhap chuoi con can chen: ");
    fflush(stdin);
    gets(c2);
    c2 has nothing ! It's only a pointer !!

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

    ừa đúng rùi vậy mà kô nghĩ ra, thks mọi người

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

  1. Pattern ( trong regex ) lọc lấy chuỗi giữa 2 chuỗi biết trước ?
    Gửi bởi thitgaluoc trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 23-05-2011, 10:28 PM
  2. Turbo C Lỗi Nhập một chuỗi và 1 từ cho biết từ đó xuất hiện trong chuỗi bao nhiêu lần?
    Gửi bởi vietvinhqn1992 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 17-01-2011, 12:38 PM
  3. Em không biết lỗi này ? ( chuỗi ký tự )
    Gửi bởi chienthan_ct trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 02-11-2008, 07:18 PM
  4. Hỏi biến kiểu chuỗi
    Gửi bởi baothanh07 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 14-02-2008, 08:49 AM
  5. Ghép một biến kiểu chuỗi với một biến kiễu kí tự
    Gửi bởi khoadangnguyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 01-12-2007, 01:55 PM

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