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 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Kiểm tra chuỗi đối xứng, không phân biệt chữ hoa chứ thường và xóa các dấu câu có trong chuỗi

    Em nó là câu 1 trong cái đề này
    https://drive.google.com/file/d/0BzhvMGckJdEfMDNNdE84ZERJbzg/edit?usp=sharing
    code của mình đây.

    Mã:
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    void loaibodaucham(char S[])
    {
    	int i = 0;
    	while (i <= strlen(S))
    	{
    		if (S[i] > 0 && S[i] <= 46)
    		{
    			int j = i;
    			while (j < strlen(S))
    			{
    				S[j] = S[j + 1];
    				j++;
    			}
    		}
    		i++;
    	}
    }
    int palindrome(char S[])
    {
    	int i = 0;
    	int j = strlen(S) - 1;
    	while (i < j)
    	{
    		if (S[i] != S[j - i] && S[i] + 32 != S[j - i] && S[i] != S[j - i] + 32) return 0;
    		i++;
    	}
    	return 1;
    }
    void main()
    {
    	char S[256];
    	printf("Nhap chuoi: "); gets(S);
    	char S1[256];
    	strcpy(S1, S);
    	loaibodaucham(S1);
    	printf("%d
    ", palindrome(S1));
    }
    Theo code này mình test vd 1 và 3 thì đúng nhưng vd 2 thì nó lại xuất ra 0 [IMG]images/smilies/Cry.gif[/IMG]. Mấy bạn kiểm tra giùm mình xem hàm xóa dấu mình sai chỗ nào với [IMG]images/smilies/Cry.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hi Razelux !

    Chuỗi đối xứng Palindrome, là 1 bài toán khá hay. Nếu giải theo cách bình thường cắt chuỗi thì mất cái hay của bài toán.
    Bạn thử tham khảo cách làm này nhé, tôi dùng đệ quy để so sánh ký tự đầu và cuối chuỗi , và cho chúng giảm tăng tùy thuộc vào kí tự đó có phải là Alphabet hay không.

    Mã:
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    #include <ctype.h>
    
    int checkAlphabet(char c)
    {
    	if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
    		return 1;
    	return 0;
    }
    int palindrome(char S[],int &i,int &j)
    {
    	if(i>=j)
    		return 1;
    	if(checkAlphabet(S[i])!=1 && checkAlphabet(S[i])!=1)
    	{
    		i++;
    		j--;
    		palindrome(S,i,j);
    	}
    	else if(checkAlphabet(S[i]) != 1)
    	{
    		i++;
    		palindrome(S,i,j);
    	}
    	else if(checkAlphabet(S[j]) != 1)
    	{
    		j--;
    		palindrome(S,i,j);
    	}
    	else
    	{
    		if(toupper(S[i]) != toupper(S[j]))
    			return 0;
    		else
    		{
    			i++;
    			j--;
    			palindrome(S,i,j);
    		}
    	}
    }
    void main()
    {
    	char S[256];
    	printf("Nhap chuoi: ");
    	gets(S);
    	int i =0;
    	int j = strlen(S) - 1;
    	printf("%d
    ", palindrome(S,i,j));
    	getch();
    }
    Nên tham khảo thêm kỹ thuật xử lý mảng :



 

 

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
  •