以下错误导致错误prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
我也尝试过,以下编译但在运行时随机行为:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
很抱歉这个愚蠢的问题,但我搜索了谷歌,我能看到的只是“char char to char ptr”,“char ptr to char array”等等。
答案 0 :(得分:189)
y += d;
我会使用+=
运算符而不是命名函数。
答案 1 :(得分:54)
使用push_back()
:
std::string y("Hello worl");
y.push_back('d')
std::cout << y;
答案 2 :(得分:17)
要使用append方法向std :: string var添加char,您需要使用此重载:
std::string::append(size_type _Count, char _Ch)
编辑: 你是对的我误解了在上下文帮助中显示的size_type参数。这是要添加的字符数。所以正确的电话是
s.append(1, d);
不
s.append(sizeof(char), d);
或者最简单的方法:
s += d;
答案 3 :(得分:9)
除了提到的其他内容之外,其中一个字符串构造函数采用char和该char的重复次数。 所以你可以用它来附加一个字符。
std::string s = "hell";
s += std::string(1, 'o');
答案 4 :(得分:7)
我通过将它们运行到一个大循环来测试几个命题。 我使用microsoft visual studio 2015作为编译器,我的处理器是i7,8Hz,2GHz。
long start = clock();
int a = 0;
//100000000
std::string ret;
for (int i = 0; i < 60000000; i++)
{
ret.append(1, ' ');
//ret += ' ';
//ret.push_back(' ');
//ret.insert(ret.end(), 1, ' ');
//ret.resize(ret.size() + 1, ' ');
}
long stop = clock();
long test = stop - start;
return 0;
根据该测试,结果如下:
operation time(ms) note
------------------------------------------------------------------------
append 66015
+= 67328 1.02 time slower than 'append'
resize 83867 1.27 time slower than 'append'
push_back & insert 90000 more than 1.36 time slower than 'append'
<强>结论强>
+=
似乎更容易理解,但如果你关注速度,请使用追加
答案 5 :(得分:6)
答案 6 :(得分:2)
问题:
std::string y("Hello worl");
y.push_back('d')
std::cout << y;
是你必须得到'd'而不是使用char的名字,比如char d ='d';或者我错了吗?
答案 7 :(得分:2)
尝试使用d作为指针 y.append(* d)
答案 8 :(得分:1)
int main()
{
char d = 'd';
std::string y("Hello worl");
y += d;
y.push_back(d);
y.append(1, d); //appending the character 1 time
y.insert(y.end(), 1, d); //appending the character 1 time
y.resize(y.size()+1, d); //appending the character 1 time
y += std::string(1, d); //appending the character 1 time
}
请注意,在所有这些示例中,您可以直接使用字符文字:y += 'd';
。
你的第二个例子几乎会因为无关的原因而起作用。 char d[1] = { 'd'};
无效,但char d[2] = { 'd'};
(注意数组大小为2)的工作方式与const char* d = "d";
大致相同,字符串文字可以附加:y.append(d);
。
答案 9 :(得分:0)
str.append(10u,'d'); //appends character d 10 times
注意我写了 10u 而不是10我想要追加该字符的次数;用任何数字替换10。
答案 10 :(得分:0)
我找到了一种简单的方法...
我需要将char
附加到正在动态构建的字符串上。我需要一个char list;
,因为我是给用户一个选择,并在switch()
语句中使用了这个选择。
我只是添加了另一个std::string Slist;
,然后将新字符串设置为等于字符“ list”的a,b,c或最终用户选择的任何其他字符:
char list;
std::string cmd, state[], Slist;
Slist = list; //set this string to the chosen char;
cmd = Slist + state[x] + "whatever";
system(cmd.c_str());
复杂性可能很酷,但简单性却很酷。恕我直言
答案 11 :(得分:0)
还添加了插入选项,如前所述。
std::string str("Hello World");
char ch;
str.push_back(ch); //ch is the character to be added
OR
str.append(sizeof(ch),ch);
OR
str.insert(str.length(),sizeof(ch),ch) //not mentioned above
答案 12 :(得分:-1)
如果您使用的是push_back,则不会调用字符串构造函数。否则它将通过强制转换创建一个字符串对象,然后它会将此字符串中的字符添加到另一个字符串中。一个小角色太麻烦了;)