我正在尝试将“你好,这是朋友”更改为“你好1,他是1Yhe朋友”
#include <iostream>
using namespace std;
int main()
{
string str("Hello this is The friend");
for ( int i = 0 ; i < str.size(); i++)
{
if (str[i] == 'T')
{
str[i] = '1Y';
}else if (str[i] == 't')
{
str[i] = '1Y';
}
}
cout<<str;
}
输出为“你好,你是朋友”。
答案 0 :(得分:3)
var timer = duration, hours, minutes, seconds;
的实现是std::string
,这意味着您只能在其中使用单个字符。
您正在使用非法的多字符常量std::basic_string<char>
。我猜你的编译器警告过你。由于他不能插入一个多字符,因此编译器为您选择了一个,即'1Y'
。
如果要用另一个字符之外的字符替换字符,则应查看诸如How to replace all occurrences of a character in string?
之类的解决方案。答案 1 :(得分:1)
您不能使用char
用多字节字符替换单字节operator[]
。您需要执行以下操作:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str("Hello this is The friend");
string::size_type i = 0;
while (i < str.size())
{
if ((str[i] == 'T') || (str[i] == 't'))
{
str[i] = '1';
str.insert(i+1, 'Y');
// or:
// str.replace(i, 1, "1Y");
i += 2;
}
else
++i;
}
cout << str;
}
或者:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str("Hello this is The friend");
string::size_type i = 0;
while ((i = str.find_first_of("Tt", i)) != string::npos)
{
str[i] = '1';
str.insert(i+1, 'Y');
// or:
// str.replace(i, 1, "1Y");
i += 2;
}
cout << str;
}
或者:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string str("Hello this is The friend");
ostringstream oss;
for (string::size_type i = 0; i < s.size(); ++i)
{
if ((s[i] == 'T') || (s[i] == 't'))
oss << "1Y";
else
oss << s[i];
}
cout << oss.rdbuf();
}