输入"cobra"到输出"dpcsb" 将 1 个字符转换为下一个 c++
Input "cobra" to output "dpcsb" Translating 1 char to next c++
问题是:
编写一个简单的程序,使用查找表或简单的算法来加密文本字符串;例如,文本字符串"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
- 使用 getline 而不是 cin 来获取整行而不是第一个单词。
- 迭代到字符串的末尾,而不是任意的 0。
-
与原始值进行比较,而不是 +1 值。不要测试电流+1是否为1,测试电流是否为0。
char *itr = inputwords; for ( ; *itr; ++itr ) { char curr = *itr; }
- 不要忘记处理"z"和"Z"
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 转换特殊字符(UTF-8)
- 将转换字符键入 int 以用作向量C++的索引
- 将字符随机转换为大写的函数
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 如何转换数据结构以在 c++ 中转换字符*
- 不兼容的转换字符
- 将转换字符数组[16]键入为int 128位
- 在c++中转换字符编码
- 使用递归转换字符
- 如何在Objective-C/C/C++中转换字符和字节的位置
- C++到Pep/8汇编语言的转换——字符数组
- 转换字符>十六进制