Как сформировать строку из нескольких символов в цикле for

Первая часть моего кода используется для получения однострочного ввода от пользователя и замены определенных символов в этом слове с помощью функций-членов класса строки. Мне было легко разобраться с этой частью, но я не могу понять, как сформировать новую строку из этих измененных символов, так как позже мне понадобится использовать эту строку для дальнейшей манипуляции в моем коде.

Это проблематично, поскольку цикл for выводит одиночные переменные типа char, которыми нельзя манипулировать как одной строкой.

#include <iostream>
#include <string>

using namespace std;

int main(){
string word;
char letter;
int i;
cout << "Enter a word: ";
cin >> word;
cout << "\n";
for ( i = 0; i < word.size(); i++)
{
if ( word.at(i) == 'e')
{
word.at(i) = '3';
}
if ( word.at(i) == 'i' )
{
word.at(i) = '1';
}
if ( word.at(i) == 'x' )
{
word.at(i) = '*';
}
cout << word.at(i);
}
cout << "\n";
}

Поскольку мой код в настоящее время стоит, пользователь может, например, ввести строку «сыр» и получить вывод ch33s3. Однако этот вывод не является строкой; это набор символов без пробела для их разделения. Я не могу продолжить свой код дальше, оставив вывод цикла for таким, какой он есть в настоящее время.

Изменить: теперь я понимаю, что у меня уже есть то, что мне нужно, но запутался, думая, что объем не будет применяться за пределами моего цикла for. Спасибо за быстрые и простые ответы.

0

Решение

Переменная слово содержит измененную строку и может управляться как таковой. Похоже, у вас уже есть то, что вам нужно.

Кроме того — вы, возможно, уже знаете это — но вам не нужна функция «at», чтобы выполнить то, что вы здесь делаете. Вы можете индексировать строку как массив. Например:

word[i] = 'e';
cout << word[i];
0

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

Вы уже почти закончили

#include <iostream>
#include <string>

using namespace std;

int main(){
string word;
char letter;
int i;
cout << "Enter a word: ";
cin >> word;
cout << "\n";
for ( i = 0; i < word.size(); i++)
{
if ( word.at(i) == 'e')
{
word.at(i) = '3';
}
if ( word.at(i) == 'i' )
{
word.at(i) = '1';
}
if ( word.at(i) == 'x' )
{
word.at(i) = '*';
}
}
cout << word << "\n";
}
2

Оказывается, ваша работа уже сделана для вас. Ваша переменная «word» будет содержать значение «ch33s3» после окончания цикла.

1

Однако этот вывод не является строкой

Вы хотели использовать std::ostringstream вместо std::cout получить результаты?

word.at(i) = xxx; заявления уже манипулировали word Строка, и у вас есть.

Вот пример, чтобы показать, как получить std:string результат, без манипуляций word непосредственно:

#include <iostream>
#include <string>
#include <sstream>

int main() {
std::string word;
char letter;
int i;
std::cout << "Enter a word: ";
std::cin >> word;

std::ostringstream leetWord;
for ( i = 0; i < word.size(); i++) {
if ( word[i] == 'e') {
leetWord << '3';
}
else if ( word[i] == 'i' ) {
leetWord << '1';
}
else if ( word[i] == 'x' ) {
leetWord << '*';
}
else {
leetWord << word[i];
}
}

// Here you can refer to the ostringstream::str() function to
// get a string
std::string theWantedString = leetWord.str();
std::cout << word << " => " << theWantedString << std::endl;
}

Увидеть рабочий образец.

0