这个题做的快吐了 怎么说呢 主要问题是 如何输入一行字符串 有两种方式 第一种是用字符数组 即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 条评论) |