描述 - 我正在使用c ++ stl列表来解决问题。问题的一部分涉及找到否。字符串中的distict charachters。
我的方法 - 我创建了一个列表。将'str'的元素复制到它。排序列表。删除了所有重复元素,并尝试将唯一元素s复制到新字符串'str2'。
问题 - 当我将列表的内容复制到新字符串str2时,复制到str2时*的值似乎不匹配为什么会发生这种情况?
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
#include <list>
using namespace std;
int main()
{
list<char> l1;
string str;
int n;
cin>>n;
cin>>str;
for(int i=0;i<n;++i){
l1.push_back(str[i]);
}
l1.sort();
l1.unique();
string str2;
int x=0;
for(list<char>::iterator it=l1.begin();it!=l1.end();++it){
str2[x]=*it;
cout<<"x"<<x;
cout<<*it<<" ";
cout<<str[x]<<" "<<endl;
++x;
}
int n2=str2.length();
for(int i=0;i<n2;++i){
cout<<str2[i]<<" ";
}
return 0;
}
curro / p -
x0a b
x1b e
x2e a
x3f b
我希望 -
x0a a
x1b b
x2e e
x3f f
答案 0 :(得分:1)
你得到这个是因为str2
是空的。在此处对其进行索引str2[x]=*it
会导致未定义的行为。
您可以根据原始字符串str2
的长度为str
分配空格,然后填写一些您不会在实际字符串中使用的字符来解决此问题(I使用下面的'-'
)
string str2(str.size(), '-');