Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中使用concat字符串时容易混淆+; 我只是尝试测试如何在C++中分割单词,但是我遇到了非常未知的错误。这个问题真让我发疯,我不知道为什么会这样_C++_String - Fatal编程技术网

在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:请不要从问题中删除原始代码,如果你这样做,答案就会变得毫无意义。