输入"cobra"到输出"dpcsb" 将 1 个字符转换为下一个 c++

Input "cobra" to output "dpcsb" Translating 1 char to next c++

本文关键字:转换 字符 下一个 c++ cobra 输出 dpcsb 输入      更新时间:2023-10-16

问题是:
编写一个简单的程序,使用查找表或简单的算法来加密文本字符串;例如,文本字符串"Hello World"可以加密为字符串"ifmmp xpqme",只需将每个字符翻译成字母表的下一个字母即可

  char inputwords[100];
char *words;
char y='w';
int x=0;
cout<<"Enter word: ";
cin>>inputwords;
words=&inputwords[0];

for(int ctr=0;ctr<100;ctr++)
{
    if(*(words+ctr)+1==1||*(words+ctr)+1==-51)
        cout<<" ";
    else
    cout<<char(*(words+ctr)+1);
}

这是代码片段我的问题是当我输入"Hello World"时,输出只是"ifmmp",它忽略了"世界"。帮助:(

cin

输入流上使用>>只会读取第一个单词,在您的情况下,它只是Hello跳过World。因此,要将整个多字字符串读取到char数组inputwords使用,

cin.getline(inputwords, sizeof(inputwords));

无论您的输入字符串是什么,for循环都会迭代 100 次,这将导致字符串后出现垃圾值。

您需要处理情况,例如,如果两个单词之间有一个空格,则使放置保持不变并且不前进导致!

您正在用C++编码。使用std::string和STL的算法,而不是老式的C数组和手工制作的循环。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
    //encryption function, maths may be wrong.
    auto f=[](char &x){x=(x+1)%255;};
    //decryption function, maths may be wrong too.
    auto g=[](char &x){x=(x-1)%255;};
    std::string s;
    std::getline(std::cin,s);
    std::cout<<s<<std::endl;
    std::for_each(std::begin(s),std::end(s),f);
    std::cout<<s<<std::endl;
    std::for_each(std::begin(s),std::end(s),g);
    std::cout<<s<<std::endl;
    return 0;
}

编辑:lambda需要C++11,可以很容易地适应与C++03编译器一起使用。

编辑 2 :在那里看到它的实际效果 -> http://ideone.com/SjeVaQ

  1. 使用 getline 而不是 cin 来获取整行而不是第一个单词。
  2. 迭代到字符串的末尾,而不是任意的 0。
  3. 与原始值进行比较,而不是 +1 值。不要测试电流+1是否为1,测试电流是否为0。

    char *itr = inputwords;
    for ( ; *itr; ++itr ) {
        char curr = *itr;
    }
    
    1. 不要忘记处理"z"和"Z"