PDA

View Full Version : Nhờ các bro giúp đỡ về chuỗi đối xứng



vanquyenhp
07-05-2009, 22:50
Các bác ơi giúp em với, em có 1 bài toán thế này:
Nhập vao 1 chuỗi từ bàn phim VD chuỗi "ABCBA" hoặc "ABCCBA"
Viết chương trình kiểm tra xem chuỗi này có đối xứng không.
Các bác ơi giúp em với, bài này hóc quá.
Thanks các bác nhiều lắm!

phamthimen84
08-05-2009, 01:10
thanks you! Mình cũng đang tìm hiểu vấn đề này!!

kimduquan
08-05-2009, 11:10
bạn tạo 1 chuỗi mới,copy chuỗi cần kiểm tra vào chuỗi mới,đảo chuỗi mới rồi so sánh với chuỗi cần kiểm tra,nếu giống nhau thì chuỗi cần kiểm tra là đối xứng.

vanquyenhp
08-05-2009, 23:50
Cám ơn bác đã cho em ý tưởng. Nhưng trong sách em học không có hàm nào làm đảo chuỗi. Em cũng thử làm với từng ký tự nhưng cũng không được. Bác có thẻ cho em hàm để đảo chuỗi không?

kimduquan
11-05-2009, 08:57
chuỗi kí tự thì cũng chỉ là mảng 1 chiều các phần tử có kiểu char thôi,muốn đảo chuỗi thì bạn chỉ cần làm như đảo thứ tự của mảng 1 chiều đó.

pdah
11-05-2009, 11:16
Đảo chuỗi cũng là 1 cách.
Tốt nhất là bạn so sánh từng cặp ký tự ở 2 đầu cho đến khi nào vào giữa, nếu phát hiện cặp nào không giống nhau thì đó là chuỗi không đối xứng. Mã giả thì thế này


bool isPalindrome(s)
{
len = length(s);
for i = 0 to len/2
if ( s[i] != s[len-i-1] )
return false;
return true;
}

minhquang12g
11-05-2009, 17:57
Các bác ơi giúp em với, em có 1 bài toán thế này:
Nhập vao 1 chuỗi từ bàn phim VD chuỗi "ABCBA" hoặc "ABCCBA"
Viết chương trình kiểm tra xem chuỗi này có đối xứng không.
Các bác ơi giúp em với, bài này hóc quá.
Thanks các bác nhiều lắm!

Mình thấy banif này cũng không khó lắm đâu, tại bạn chưa chịu nghĩ đó thôi. Bạn nên tập cách hình dung bài toán rồi từ đó tìm hướng giải quyết vấn đê.Giờ mình mô tả thuật toán rồi bạn tự viết code nha. Có gì không hiểu thì liên hệ với minh mail: minhquang12g@gmail.com yahoo: haytinvaochinhminh_12gcolen.
1. Duyệt đòng thời: i: 0->l/2 và j: l-1->l/2.
2. So sanh i voi j. Nếu i!=j ->Kết luận chuổi không đối xứng return . Ngược lại (i==j) tiếp tục duyệt.
3. Nếu i==l/2 thì kết luận chuổi đối xứng.

thaoquyenctk31
11-05-2009, 19:27
lúc sáng ngồi làm bài xâu kí tự tới câu này thấy khó hiểu đề nên chuyển qua câu khác. giờ vào diển đàn tình cờ gặp câu hỏi này, nhờ các bác pro mình làm ra rồi. thank các bác nhiều nha....

binhung12
17-07-2010, 09:47
#include <stdio.h>
#include <conio.h>
void main()
{char A[100];
int i,j;
printf ("\n nhap chuoi");
gets A;
j= strlen(chuoi)-1;
while ( A[i++]== A[j--]}
if (--i> ++i)
printf ("\n chuoi doi xung");
else
printf ("\n chuoi khong doi xung")'
getch();
}

Pho-bo
18-07-2010, 14:29
Mình xài C++ quen rồi mọi người đổi lai cout<< thàng printf va cin>> thành scanf nha. Mọi người cho ý kiến.


void main()
{
char *s=new char[100];
cout<<"Nhap vao mot chuoi:";
cin.getline(s,100);
int n=(int)strlen(s);
int i=0,j=n-1;
bool co=true;
while(i<n)
{
if(s[i++]!=s[j--])
co=false;
else
{
i++;
j--;
}
}
if(co==true)
cout<<"Chuoi doi xung";
else
cout<<"Chuoi khong doi xung";
}

megaownage
19-07-2010, 14:07
Phê code:
while(i<n)
Không cần phải đi hết chuỗi. Chỉ cần nửa chuỗi thôi


int i, n, palindrome;
n = strlen(s) - 1; /* n là cuối chuỗi */
i = 0; /* i bắt đầu từ pt đầu */
palindrome = 1; /* C không có true hay false, chỉ dùng 0 và khác 0 */
while (i < n-i && palindrome) /* i là pt trái, n-i là pt phải */
if (s[i] != s[n-i]) palindrome = 0;
else i++;
printf ("\n chuoi %sdoi xung", (palindrome)? "" : "khong ");
/* nếu không phải là palindrome thì in thêm chữ 'không' */

keke23
20-07-2010, 14:11
Bạn thử code hàm check này xem nhé!

bool check (string tem){
for (int i=0; i<tem.length()/2; i++){
if (tem[i] != tem[tem.length()-i-1]){
return false;
}
}
return true;
}