Code xóa kí tự trùng trong xâu bị sai

#include<bits/stdc++.h>
using namespace std;

int main()
{string x; int l,i,j,k;
cin>>x;
l=x.size();
for (i=0;i<l-1;i++)
    {j=i+1;
    while (j<l)
    if (x[i]==x[j])
        {for (k=j;k<l-1;k++) x[k]=x[k+1];
        l=l-1;
        }
        else j=j+1;
    }
cout<<x;
return 0;
}

Chả biết sai ở đâu nữa mong mọi người chỉ giúp :blush:

Xóa ngay trong vòng lặp (số lần lặp cố định) là không ổn rồi.
Cách hay là lưu các kí tự vào chuỗi mới.


  • Cách định dạng mã của bạn xấu đau đớn.
  • Vòng lặp chạy đến l-1 phải là i<l (không phải i<l-1).
Định dạng
#include<bits/stdc++.h>

using namespace std;

int main() {
    string x;
    int l, i, j, k;
    cin >> x;
    l = x.size();
    for (i = 0; i < l - 1; i++) {
        j = i + 1;
        while (j < l)
            if (x[i] == x[j]) {
                for (k = j; k < l - 1; k++) x[k] = x[k + 1];
                l = l - 1;
            } else {
                j = j + 1;
            }
    }
    cout << x;
    return 0;
}
4 Likes
#include <bits/stdc++.h>
using namespace std;
string s; int i,j;
int main()
{
    getline(cin,s);
    for(i=0;i<s.size();++i)
    {
        j=i+1;
        do
        {
            if(s[i]==s[j]) s.erase(j,1);
            else j++;
        } while(j<=s.length());
    }
    cout<<s;
}

Thế này được không vậy anh ?

Được không thì chạy thử.
Kết quả đúng không?

4 Likes

Đúng anh ạ :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?