我正在尝试通过将字符串分解为字符来编码c ++

时间:2018-08-15 22:32:15

标签: c++ string chars

我正在尝试将“你好,这是朋友”更改为“你好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;
}

输出为“你好,你是朋友”。

2 个答案:

答案 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();
}