在c+中使用concat字符串时容易混淆+; 我只是尝试测试如何在C++中分割单词,但是我遇到了非常未知的错误。这个问题真让我发疯,我不知道为什么会这样
这是我的代码:在c+中使用concat字符串时容易混淆+; 我只是尝试测试如何在C++中分割单词,但是我遇到了非常未知的错误。这个问题真让我发疯,我不知道为什么会这样,c++,string,C++,String,这是我的代码: std::string key = "hello world"; std::string word = ""; for (int i = 0; i < (int)key.length(); i++) { if (std::isspace(key[i]) || key[i] == '\0') { std::cout << word << "\n"; word.clear(); } els
std::string key = "hello world";
std::string word = "";
for (int i = 0; i < (int)key.length(); i++)
{
if (std::isspace(key[i]) || key[i] == '\0')
{
std::cout << word << "\n";
word.clear();
}
else
word += key[i];
}
编辑2:用以下方法解决:
if (std::isspace(key[i]) || key[i + 1] == '\0')
{
if (key[i + 1] == '\0')
word += key[i];
键[j]==0
永远不会发生,字符串长度不计算终止0,因此最后一个字永远不会打印出来
删除该测试,并添加第二个
std::cout键[j]==0
将永远不会发生,字符串长度不计算终止的0,因此最后一个字将永远不会被打印出来
删除该测试,并添加第二个std::cout说明它为什么不工作
因为这一条件从未满足:
key[i] == '\0'
因为j
总是小于key.length(),而且(理论上)“\0”字符应该在key[key.length()]处,所以您永远无法到达它,因此不会打印出第二个单词
如果您将密钥更改为:
std::string key = "hello world again";
你会看到它打印出来
hello
world
但它不会再次打印
从C的角度来看它
C-String(不是C++ STD::String)以\\ 0终止
因此,如果要继续沿着当前路径查找“\0”字符,则需要使用C字符串
为此,您可以更改()的for
,以便j
是它不工作的原因
因为这一条件从未满足:
key[i] == '\0'
因为j
总是小于key.length(),而且(理论上)“\0”字符应该在key[key.length()]处,所以您永远无法到达它,因此不会打印出第二个单词
如果您将密钥更改为:
std::string key = "hello world again";
你会看到它打印出来
hello
world
但它不会再次打印
从C的角度来看它
C-String(不是C++ STD::String)以\\ 0终止
因此,如果要继续沿着当前路径查找“\0”字符,则需要使用C字符串
为此,您可以更改for()
,使j
重复:您使用j作为计数变量,但突然要求key[i]
,这是一种打字错误吗?@ChuMai:请不要从问题中删除原始代码,如果你这样做,答案就会变得毫无意义。重复:你使用j作为计数变量,但突然要求键[i]
?@ChuMai:请不要从问题中删除原始代码,如果你这样做,答案就会变得毫无意义。