#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
string s = "Too many tags";
for(int i = 0; i < s.size(); i++){
if(!(isspace(s[i]))){
s[i] = '#' + s[i];
}
}
cout << s << endl;
return 0;
}
我正在尝试制作一个程序,在字符串中的每个字母之前添加#tag,但在输出中我得到奇怪的字母..我的错误在哪里?
答案 0 :(得分:6)
s[i] = '#' + s[i];
修改现有字符的值。如果要在字符串中添加新字符,则应使用insert:
s.insert(i, "#");
正如Mark Ransom指出的那样,你还需要在字符串中再移动一个字符,以避免在同一个字母前不断添加“#”。您可以使用
执行此操作s.insert(i++, "#");
请注意,您可以随时接受VladimirM的建议,并对
之类的内容进行稍微更大的更改int i=0;
while (i<s.size()) {
if (!isspace(s[i])) {
s.insert(i++, "#");
}
i++;
}
答案 1 :(得分:4)
这一行:
s[i] = '#' + s[i];
没有做你想象的那样。 s[i]
是char
,#
也是char
。将这些添加在一起并不会给出两个字符的串联,它会为您添加字符的整数代码(因此#
为35,而s[i]
恰好是{{1}}的ASCII代码)。
答案 2 :(得分:2)
我添加更多:我认为更简单的方法是使用临时变量,否则你的'insert'循环将进入无限循环并将挂起:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
string s = "Too many tags";
string res = "";
for(int i = 0; i < s.size(); i++){
if(!(isspace(s[i]))){
res += "#";
}
res += s[i];
}
cout << res << endl;
return 0;
}