初始值设定项无法确定C++; 我写了一个程序,从C++中删除字符串中的空格。但是当我编译这个程序时,我得到了两个错误。它们是错误:初始值设定项无法确定“str1”的大小和错误:数组必须使用括号括起的初始值设定项进行初始化

初始值设定项无法确定C++; 我写了一个程序,从C++中删除字符串中的空格。但是当我编译这个程序时,我得到了两个错误。它们是错误:初始值设定项无法确定“str1”的大小和错误:数组必须使用括号括起的初始值设定项进行初始化,c++,C++,有人能告诉我代码的错误吗。我是C++新手。我在下面提到了我的代码 #include <stack> #include <string> #include <iostream> #include <algorithm> using namespace std; char *delSpaces(char *str) { int i = 0, j = 0; while (str[i]) { if (str[i] != '

有人能告诉我代码的错误吗。我是C++新手。我在下面提到了我的代码

#include <stack>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

char *delSpaces(char *str)
{
    int i = 0, j = 0;
    while (str[i])
   {
    if (str[i] != ' ')
       str[j++] = str[i];
    i++;
   }
    str[j] = '\0';
    return str;
}

int main(){
    string s;
    cin >> s;
    char str1[]=s;  
    cout << delSpaces(str1);
}
#包括
#包括
#包括
#包括
使用名称空间std;
char*delSpaces(char*str)
{
int i=0,j=0;
while(str[i])
{
如果(str[i]!='')
str[j++]=str[i];
i++;
}
str[j]='\0';
返回str;
}
int main(){
字符串s;
cin>>s;
字符str1[]=s;
库特

不是C++,

我建议将函数更改为通过引用获取
字符串
参数

但是如果您不能做到这一点,那么从C++11开始,获得对非
常量
字符
缓冲区的读/写访问权的一种方法是

&s[0]
由于C++17,您还可以使用
s.data()


但是,请注意,您的
delSpaces
在提供的缓冲区中创建了一个以零结尾的字符串,而对
string
一无所知。因为
string
可以保存任何二进制数据
s.length()
将不受对
delSpaces
的调用的影响。您可以通过添加对
s.resize()
的调用来解决这个问题,但是,更好的方法是使用
字符串和
参数来表示
delSpaces

您不能初始化
字符[]
缓冲区带有
std::string
对象,这就是出现错误的原因

你必须做更多类似的事情:

char *str1 = new char[s.size()+1];
std::copy(s.begin(), s.end(), str1);
str1[s.size()] = '\0';
std::cout << delSpaces(str1);
delete[] str1;
您甚至可以让STL为您删除空格字符:

void delSpaces(std::string &str) {
    str.erase(
        std::remove(str.begin(), str.end(), ' '),
        str.end()
    );
}
话虽如此,请注意,默认情况下,当
操作符>>
读取字符数据时,它会忽略前导空格,然后在遇到空格时停止读取,因此在这种情况下使用
操作符>
将永远不会返回包含空格的
std::string
,因此您的
delSpaces()
函数非常无用,如图所示。请改用
std::getline()
函数,它会一直读取直到遇到换行符,因此可以返回一个包含空格的字符串:

std::getline(std::cin, s);

<代码> char STR1[]/s;<代码> >不有效的C++。并且不需要将STD::string转换成字符数组。@ NeilButterworth,您只需要正确的初始化器<代码> char fo[][Works];< /C> > NeilButterworth >代码> char AlWavs[];
@NeilButterworth我想从用户那里获取输入。那么我怎么做呢?为什么不将
std::string
传递给
delSpaces
s.data()
(从C++17开始)。std::string现在不是总是以null结尾吗?是的,它总是定义良好的,不是吗?
s[s.size()]
在C++11中有效:您看到@Justin的评论了吗?我不知道它在C++11中是如何未定义的。
void delSpaces(std::string &str) {
    str.erase(
        std::remove(str.begin(), str.end(), ' '),
        str.end()
    );
}
std::getline(std::cin, s);