初始值设定项无法确定C++; 我写了一个程序,从C++中删除字符串中的空格。但是当我编译这个程序时,我得到了两个错误。它们是错误:初始值设定项无法确定“str1”的大小和错误:数组必须使用括号括起的初始值设定项进行初始化
有人能告诉我代码的错误吗。我是C++新手。我在下面提到了我的代码初始值设定项无法确定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] != '
#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);