Первая часть моего кода используется для получения однострочного ввода от пользователя и замены определенных символов в этом слове с помощью функций-членов класса строки. Мне было легко разобраться с этой частью, но я не могу понять, как сформировать новую строку из этих измененных символов, так как позже мне понадобится использовать эту строку для дальнейшей манипуляции в моем коде.
Это проблематично, поскольку цикл 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. Спасибо за быстрые и простые ответы.
Переменная слово содержит измененную строку и может управляться как таковой. Похоже, у вас уже есть то, что вам нужно.
Кроме того — вы, возможно, уже знаете это — но вам не нужна функция «at», чтобы выполнить то, что вы здесь делаете. Вы можете индексировать строку как массив. Например:
word[i] = 'e';
cout << word[i];
Вы уже почти закончили
#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";
}
Оказывается, ваша работа уже сделана для вас. Ваша переменная «word» будет содержать значение «ch33s3» после окончания цикла.
Однако этот вывод не является строкой
Вы хотели использовать 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;
}
Увидеть рабочий образец.