无法在C ++中将字符串分配给字符串数据类型

时间:2018-08-08 03:47:58

标签: c++ string character

我正在尝试编写一个简单的程序,该程序可以从字符串中删除空格,如下所示:

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

int main()
{
    string s;
    getline(cin,s);
    cout<< s;
    string c;
    int i =0,j=0;
    while(s[i]!='\0'){
        if(s[i] == ' ')
            i++;
        else{
            c[j] = s[i];
            j++;
            i++;
        }
    }
    c[j] ='\0';
    cout << c; //unable to print

 }   

在这里,当我尝试打印c时,似乎无法获得结果。当我使用c作为字符数组时,它可以工作,但我仍然想知道自己在做什么错。非常感谢

1 个答案:

答案 0 :(得分:1)

string c;

创建一个空字符串。之后,

c[j] = s[i];

是未定义行为的原因。

您可以使用多种策略解决问题。这里有几个:

构造c,使其足够大

string c(s.size(), '\0');

使用std::string::push_back

代替

    c[j] = s[i];

    ...

c[j] ='\0';

使用

    c.push_back(s[i]);

    ...

c.push_back('\0');