无法理解我的程序的输出

时间:2018-02-08 11:42:26

标签: c++ c++11 debugging stl c++14

描述 - 我正在使用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 

1 个答案:

答案 0 :(得分:1)

你得到这个是因为str2是空的。在此处对其进行索引str2[x]=*it会导致未定义的行为。

您可以根据原始字符串str2的长度为str分配空格,然后填写一些您不会在实际字符串中使用的字符来解决此问题(I使用下面的'-'

string str2(str.size(), '-');

Demo.