C++ C++;从递归函数中打印奇怪字符
我想创建一个函数,在给定一个字符串的情况下,在每个字符之间放置“*” e、 g: 你好-->h*e*l*l*oC++ C++;从递归函数中打印奇怪字符,c++,string,char,character,cout,C++,String,Char,Character,Cout,我想创建一个函数,在给定一个字符串的情况下,在每个字符之间放置“*” e、 g: 你好-->h*e*l*l*o using namespace std; string allStar(string str, int n) { if (str.at(n + 1) == '.') { return string(1, str.at(n)); } return str.at(n) + "*" + allStar(str, n + 1); } int m
using namespace std;
string allStar(string str, int n)
{
if (str.at(n + 1) == '.') {
return string(1, str.at(n));
}
return str.at(n) + "*" + allStar(str, n + 1);
}
int main()
{
string str;
cout << "Input word: ";
cin >> str;
str = str + ".";
cout << allStar(str, 0);
return 0;
}
使用名称空间std;
字符串全明星(字符串str,int n)
{
如果(str.at(n+1)='。){
返回字符串(1,str.at(n));
}
返回str.at(n)+“*”+allStar(str,n+1);
}
int main()
{
字符串str;
cout>str;
str=str+”;
coutstr.at(n)+“*”
的意思是“取一个指向字符串文字的指针”“*”
,并将其偏移为字符str.at(n)
”的ASCII码。然后,您的程序通过访问超出范围的索引来显示未定义的行为。返回字符串(1,str.at(n))
-这里的n
是什么?是什么确保它在str
的范围内?您需要处理代码格式…我在字符串末尾添加了一个“.”以用作main的基本大小写。“我在字符串末尾添加了一个“.”以用作main的基本大小写”Hello Igor,我的新工作是C++,你能再解释一下吗?(我理解你的观点,它似乎很有说服力,而且它没有索引之外,看主。<代码> *”/代码>是<代码> char */COD>指针(我们称之为代码> P<代码>)对于两个字符的数组,{'*','\0'}
。也就是说,p+0
指向星型字符,p+1
指向终止数字。0和1是这个两元素数组中唯一有效的偏移量。现在p+'h'
相当于p+104
;字符文字'h'
代表对应字符的ASCII码,它恰好是be 104。这将指针推进到某个随机内存中,超出其边界。'h'+p
也是如此;加法是可交换的,即使对于指针算术也是如此。最后,您将从垃圾指针隐式构造std::string
,该垃圾指针生成包含垃圾字符的字符串。您可以使用“”的文本(在“)之后添加s以使用字符串而不是char*。