为什么数字和特殊字符插入空格?

时间:2015-06-03 17:17:43

标签: c++ input getline

我一直在尝试使用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;
}

2 个答案:

答案 0 :(得分:0)

你的encrypt插入特殊字符的原因是循环不注意空格,将它们移动key代码点的方式与常规字符相同。

添加一项检查以查看该字符是否为小写字母将解决问题:

for (auto &it : iostr)
{
    ch = tolower(it);
    if (!islower(ch)) {
        continue;
    }
    ch += key;
    if (ch > 'z') {
        ch -= 26;
    }
    it = ch;
}

答案 1 :(得分:0)

您正在通过包括空格的键移动所有字符。如果您希望它们留下,您需要从轮班中排除空格。例如,您可以执行以下操作:

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;
      }
   }
}