Kiểm tra chuỗi đối xứng C++

Mình có code bằng C++ để kiểm tra chuỗi đối xứng bằng 2 cách, nhưng khi test thử thì code dùng hàm bị sai 1 số trường hợp như chuỗi “abca”, còn code k dùng hàm vẫn đúng, ai giúp em fix với ạ

  • C1: không dùng hàm:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int i,t=0;
    int n=s.size();
    for(i=0;i<n/2;i++)
    {
        if(s[i]==s[n-i-1])
            t=-1;
        else
            t=0;
    }
    if(t==-1)
        cout<<"palind";
    else
        cout<<"NOT";
}
  • C2: dùng hàm:
#include<bits/stdc++.h>
using namespace std;
int pd(string s)
{
    int i;
    int n=s.size();
    for(i=0;i<n/2;i++)
    {
        if(s[i]==s[n-i-1])
            return -1;
        else
            return 0;
    }
}
int main()
{
    string s;
    cin>>s;
    if(pd(s)==-1)
        cout<<"palind";
    else
        cout<<"NOT";
}

Sai vì bạn đặt 2 return trong cả ifelse. Điều này có nghĩa là vòng lặp chạy duy nhất 1 lần là trả về kết quả luôn.
Cũng đặt biến t như cách không dùng hàm, rồi trả về t ở cuối hàm xem có tốt đẹp hơn không?

2 Likes

ok, mình fix dc r, cảm ơn bạn nha

hình như phải thêm lệnh break chỗ else nx mới đúng ấy

Đơn giản đi:

string str1 = "ABCD"; // chuỗi ban đầu
string str2 = str1.reserve(); // đảo ngược chuỗi
bool isSymm = str1 == str2;
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?