首页 > 解决方案 > 我在 C++ 中的 .append 方法有很多错误

问题描述

我对 C++ 中的 .append 方法有疑问。这是我的代码:

#include<iostream>
#include<string>
using namespace std;
int main(){
char caratteri[] = {"ciao amici"};
string str = "ciao amici";
string token = "";
for(int i = 0; i<str.length(); i++)
{
    if(str[i+1] == ' '){
        token = "";
    }
    char current_token = str[i];
    token.append(string(current_token));
    i++;
}
}

这是我的输出的一部分:

    c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:397:7: note:   no known                             conversion for argument 1 from 'char' to 'const std::__cxx11::basic_string<char>&'
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:389:7: note: candidate: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]
       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
       ^~~~~~~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:389:7: note:   no known conversion for argument 1 from 'char' to 'const std::allocator<char>&'
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:380:7: note: candidate: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits   = std::char_traits<char>; _Alloc = std::allocator<char>]
       basic_string()
   ^~~~~~~~~~~~

为什么我会遇到这个问题?我能解决吗?非常感谢 :)

标签: c++arraysstring

解决方案


您尝试std::stringchar此处创建一个:

token.append(
    string(current_token)   // <- this part
);

std::string要从单个创建一个char,您需要提供您想要char重复的次数:

token.append(string(1, current_token));

幸运的是,append有 en 重载可以让您直接执行此操作,而无需创建中间std::string

token.append(1, current_token);

但最简单的可能是使用operator+=重载添加一个char

token += current_token;

另请注意,这

if(str[i+1] == ' ')

str[str.length()]何时访问i == str.length() - 1。那就是越界访问它。它可能无论如何都会起作用,因为\0存储的只是超出范围,但我建议您修复该逻辑。


推荐阅读