为什么要在空格中插入数字和特殊字符?
Why are numbers and special characters inserted into spaces?
我一直在尝试使用 getline 来识别我的字符串输入中的空格。数字不是空格,而是在单词之间插入的特殊字符。当我正常使用 cin 时,该功能有效,但看不到空格。
如何更改以下内容以便有实际空格?
这是我的 getline 代码(字符串中的字母不再移动):
#include "stdafx.h"
using namespace std;
#include <iostream>
#include <string>
void encrypt(std::string &iostr, int key)
{
key %= 26;
int ch;
for (auto &it : iostr)
{
ch = tolower(it) + key;
if (ch > 'z')
ch -= 26;
it = ch;
}
}
int main()
{
string source;
int key = 1;
cout << "Paste cyphertext and press enter to shift 1 right: ";
getline(cin, source);
encrypt(source, key);
cout << source << "";
system("pause");
return 0;
}
您的 encrypt
插入特殊字符的原因是循环不注意空格,以与处理常规字符相同的方式将它们移动 key
个代码点。
添加检查字符是否为小写字母将解决问题:
for (auto &it : iostr)
{
ch = tolower(it);
if (!islower(ch)) {
continue;
}
ch += key;
if (ch > 'z') {
ch -= 26;
}
it = ch;
}
您正在通过该键移动所有字符,包括空格。如果你想让他们留下来,你需要从你的班次中排除这些空间。例如,您可以执行以下操作:
void encrypt(std::string &iostr, int key)
{
key %= 26;
int ch;
for (auto &it : iostr)
{
if (it != ' ') //if not space character then shift
{
ch = tolower(it) + key;
if (ch > 'z')
ch -= 26;
it = ch;
}
}
}
我一直在尝试使用 getline 来识别我的字符串输入中的空格。数字不是空格,而是在单词之间插入的特殊字符。当我正常使用 cin 时,该功能有效,但看不到空格。
如何更改以下内容以便有实际空格?
这是我的 getline 代码(字符串中的字母不再移动):
#include "stdafx.h"
using namespace std;
#include <iostream>
#include <string>
void encrypt(std::string &iostr, int key)
{
key %= 26;
int ch;
for (auto &it : iostr)
{
ch = tolower(it) + key;
if (ch > 'z')
ch -= 26;
it = ch;
}
}
int main()
{
string source;
int key = 1;
cout << "Paste cyphertext and press enter to shift 1 right: ";
getline(cin, source);
encrypt(source, key);
cout << source << "";
system("pause");
return 0;
}
您的 encrypt
插入特殊字符的原因是循环不注意空格,以与处理常规字符相同的方式将它们移动 key
个代码点。
添加检查字符是否为小写字母将解决问题:
for (auto &it : iostr)
{
ch = tolower(it);
if (!islower(ch)) {
continue;
}
ch += key;
if (ch > 'z') {
ch -= 26;
}
it = ch;
}
您正在通过该键移动所有字符,包括空格。如果你想让他们留下来,你需要从你的班次中排除这些空间。例如,您可以执行以下操作:
void encrypt(std::string &iostr, int key)
{
key %= 26;
int ch;
for (auto &it : iostr)
{
if (it != ' ') //if not space character then shift
{
ch = tolower(it) + key;
if (ch > 'z')
ch -= 26;
it = ch;
}
}
}