C++, Шифровальщик. Как прочитать строку с пробелом?

Всем привет! Как сделать так, чтобы в коде ниже можно было учитывать пробел? Вариант с cin.getline() тут не подходит. Можно ли вообще это реализовать?

#include<iostream>
#include<string>
#include<cstring>
#include<time.h>
#include<iomanip>
#include<algorithm>
#include<stdlib.h>

using namespace std;

int main()
{
	string str2= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	string str3= "1011121314151617181920212223242526272829303132333435";
	string str1;
	string res = "";
	cout << "Enter word you want encrypt" << endl;
	cin >> str1;
	for (int i = 0; i < str1.length(); i++)
	{
		if (str1[i] == 'a'|| str1[i] == 'A') res += str2.replace(0, 52, str3, 0, 2); else
		if (str1[i] == 'b'|| str1[i] == 'B') res += str2.replace(0, 52, str3, 2, 2); else
		if (str1[i] == 'c'|| str1[i] == 'C') res += str2.replace(0, 52, str3, 4, 2); else
		if (str1[i] == 'd'|| str1[i] == 'D') res += str2.replace(0, 52, str3, 6, 2); else
		if (str1[i] == 'e'|| str1[i] == 'E') res += str2.replace(0, 52, str3, 8, 2); else
		if (str1[i] == 'f'|| str1[i] == 'F') res += str2.replace(0, 52, str3, 10, 2); else
		if (str1[i] == 'g'|| str1[i] == 'G') res += str2.replace(0, 52, str3, 12, 2); else
		if (str1[i] == 'h'|| str1[i] == 'H') res += str2.replace(0, 52, str3, 14, 2); else
		if (str1[i] == 'i'|| str1[i] == 'I') res += str2.replace(0, 52, str3, 16, 2); else
		if (str1[i] == 'j'|| str1[i] == 'J') res += str2.replace(0, 52, str3, 18, 2); else
		if (str1[i] == 'k'|| str1[i] == 'K') res += str2.replace(0, 52, str3, 20, 2); else
		if (str1[i] == 'l'|| str1[i] == 'L') res += str2.replace(0, 52, str3, 22, 2); else
		if (str1[i] == 'm'|| str1[i] == 'M') res += str2.replace(0, 52, str3, 24, 2); else
		if (str1[i] == 'n'|| str1[i] == 'N') res += str2.replace(0, 52, str3, 26, 2); else
		if (str1[i] == 'o'|| str1[i] == 'O') res += str2.replace(0, 52, str3, 28, 2); else
		if (str1[i] == 'p'|| str1[i] == 'P') res += str2.replace(0, 52, str3, 30, 2); else
		if (str1[i] == 'q'|| str1[i] == 'Q') res += str2.replace(0, 52, str3, 32, 2); else
		if (str1[i] == 'r'|| str1[i] == 'R') res += str2.replace(0, 52, str3, 34, 2); else
		if (str1[i] == 's'|| str1[i] == 'S') res += str2.replace(0, 52, str3, 36, 2); else
		if (str1[i] == 't'|| str1[i] == 'T') res += str2.replace(0, 52, str3, 38, 2); else
		if (str1[i] == 'u'|| str1[i] == 'U') res += str2.replace(0, 52, str3, 40, 2); else
		if (str1[i] == 'v'|| str1[i] == 'V') res += str2.replace(0, 52, str3, 42, 2); else
		if (str1[i] == 'w'|| str1[i] == 'W') res += str2.replace(0, 52, str3, 44, 2); else
		if (str1[i] == 'x'|| str1[i] == 'X') res += str2.replace(0, 52, str3, 46, 2); else
		if (str1[i] == 'y'|| str1[i] == 'Y') res += str2.replace(0, 52, str3, 48, 2); else
		if (str1[i] == 'z'|| str1[i] == 'Z') res += str2.replace(0, 52, str3, 50, 2);
	}
	cout << res << endl;
	system("pause");
	return 0;
}

Учитывать где и как?

Почему?


Используйте кнопку Код при вставке кода на форум. FAQ по функциональности форума

Ну допустим пользователь введет не одно слово, а целое предложение. С остальными символами понятно, их просто можно добавить в str2, вот с пробелом беда. А cin.getline() работает только с типом char, а у меня string. Есть возможность это исправить?

Если я ввожу getline(cin, str1), то выходит ошибка “cout” ambiguous

Можно конвертировать одно в другое.

Но вообще есть getline не в cin, который принимает string.
http://www.cplusplus.com/reference/string/string/getline/

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    cout << s;
}

https://rextester.com/CGUA17448

1 лайк

Я так делаю. Почему в строке с “cout” ошибка?

:man_shrugging:

Это изменение вряд ли имеет отношение к ошибке, видимо поменялось что-то еще по сравнению с кодом из первого сообщения.
В нем работает: https://rextester.com/UJWQ28222

Если тестируется на rextester, то там перед нажатием Run нужно ввести в поле ввода входящие данные.
Или банально не объявлены пространства имен.

P. S.
А зачем двойное объявление: string str1 ?

1 лайк

Наверно Visual Studio в своем репертуаре. Я уже тоже проверил в двух онлайн-компиляторах и все работает. Сейчас еще попробую ctrl + c, ctrl+v в новый проект. Иногда помогает.

Реально помогло. В моем случае это становится закономерностью. Спасибо за помощь)