Я пытаюсь закодировать строку, разбив ее на символы Переполнение стека

Я пытаюсь изменить «Привет, это друг» на «Привет, 1 он — мой друг»

#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

Решение

Реализация std::string является std::basic_string<char>, что означает, что вы можете использовать только одиночные символы в нем.

Вы используете недопустимую многосимвольную константу '1Y', Я думаю, ваш компилятор предупреждал вас об этом. Поскольку он не может вставить многосимвольный символ, компилятор выбрал один для вас, т.е. 'Y' в твоем случае.

Если вы хотите заменить символы на что-то другое, чем другой односимвольный, вы должны взглянуть на такие решения, как Как заменить все вхождения символа в строку?

3

Другие решения

Вы не можете заменить один байт 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();
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector