c/c++ 有一行电文,已按下面规律译成密码: a→z b→y c→x A→Z B→Y C→X ,输出原文

阅读: 评论:0

c/c++ 有一行电文,已按下面规律译成密码: a→z b→y c→x A→Z B→Y C→X ,输出原文

c/c++ 有一行电文,已按下面规律译成密码: a→z b→y c→x A→Z B→Y C→X ,输出原文

这个题做的快吐了 怎么说呢  主要问题是 如何输入一行字符串  有两种方式 第一种是用字符数组 即char  x[10]  还有一种就是string类型 但是由于那个sb谭浩强的书上 给出了好多种方法  里面的gets函数现在根本不能用 我一个sb一直纠结于这个问题   

其实完全没必要纠结于这个问题   因为这个题的重点是怎么转换字符  而不是怎么输入一段不被空格中断的字符串    

总结  第一种可行的就是  

	string s;cout << "输入密码:";getline(cin, s);

这种不会因为空格中断  

	char c = 0;while ((c = getchar()) != 'n'){;}

这种相对来说字符串的那种感觉就没有那么强了

当然 你也可以直接给字符串赋初值  只是这样你每次更换字符串都要改程序 而不是由键盘输入 

下面为完整代码

#include<string>
int main()
{void secret(string s);string s;cout << "输入密码:";getline(cin, s);//cout << s.size() << endl;  此函数可以用来储存字符串变量的有效字符长度secret(s);return 0;
}//  a 65 b 66   y 89  z90  
//  比如 b转到y   66-65 =1  即与a的距离  然后用z减去距离 就是y
//  90-(x-65)  155-x
//  122-(x-97)  219-x
void secret(string s)
{cout << "对应的原文为:" << endl;int i = 0;while (i < s.size())      //10个有效字符 则 s[0]至s[9]  小于10 刚好{//  那么 怎么转换呢  a到z  b到y等等if (s[i] >= 'A' && s[i] <= 'Z')s[i] = 155 - s[i];else if (s[i] >= 'a' && s[i] <= 'z')s[i] = 219 - s[i];elses[i] = s[i];cout << s[i];i++;}cout << endl;
}

有关那个字符转换  其实很简单  正如代码中注释的一样  例  A为65 B为66 Y为89 Z为90(代码中写错了 当时懒得改 目的是理解) 那么B和A的距离为1  那么就用Z减去这个距离 就得到了对称的那个字符 即90-(x-65) = 155-x

还有一点就是那个  s.size()   这个函数是用来求字符串的有效字符长度的  也是一个我之前没怎么接触过的函数   挺好   且 这个函数不能用于字符数组的测长度  这个就类似于 strlen函数

教训   关于一个题  需要明白什么是主次  别因为一点不重要的东西浪费时间  

本文发布于:2024-01-29 05:30:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647741913034.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:电文   按下   原文   规律   密码
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23