|
5鱼币
各位鱼友大家好,小弟刚刚跟着小甲鱼老师学习指针,这是网上的一个题目。
然后我写了以下代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<ctype.h>
- void change(char *s);
- void insert(char *m);
- int main()
- {
- char ch;
- int i=0;
- char str[100];
- while((ch=getchar())!='\n')
- {
- str[i]=ch;
- i++;
- }
- change(str);
- insert(str);
- printf("%s\n",str);
-
- system("pause");
- return 0;
- }
- void change(char *s)//明文中的字母转换成其后的第4个字母
- {
- while(*s!='\0')
- {
- while(*s)
- {
- if(*s >= 'A' && *s <= 'V')
- *s=*s+4;
- else if(*s >= 'a' && *s <= 'v')
- *s=*s+4;
- else if(*s='w')*s='a';
- else if(*s='W')*s='A';
- else if(*s='x')*s='b';
- else if(*s='X')*s='B';
- else if(*s='y')*s='c';
- else if(*s='Y')*s='C';
- else if(*s='Z')*s='D';
- else if(*s='z')*s='d';
- s++;
- }
- }
- }
- void insert(char *m)//将密文每两个字符之间插入一个空格
- {
- while(*m!='\0')
- {
- while(*m)
- {
- printf("%c",*m);
- printf(" ");
- m++;
- }
- }
- }
复制代码
但是运行的结果有一下两个问题
1.它会将所有的数字转化为a。这不是题目要求的
2.在空格时会出现问题,详见下图。
请大家帮忙看看是什么原因
本帖最后由 丶忘却的年少o 于 2018-11-20 10:24 编辑
1. change函数你的else if判断的条件不是比较,是赋值,你将“==”写成了“=”,所以不管里面是什么都变了。
2. 就是change内的函数操作不当引起的。
我写一个我的代码,你可以参考下,优化下你的代码。(只是个人理解)
- #include "stdio.h"
- #include <string.h>
- #include <stdlib.h>
- /* 传进来的是指针和字符串的长度 */
- void change(char *str, int len)
- {
- for ( int i = 0; i < len; i++ )
- {
- // 外圈判断范围,内圈判断边界
- if ( str[i] >= 'A' && str[i] <= 'Z' )
- {
- if ( str[i] <= 'V' )
- str[i] = str[i] + 4;
- else
- str[i] = str[i] - 22;
- }
- else if ( str[i] >= 'a' && str[i] <= 'z' )
- {
- if (str[i] <= 'v')
- str[i] = str[i] + 4;
- else
- str[i] = str[i] - 22;
- }
- }
- }
- /* 我感觉是在这个函数内添加空格,不是打印,所以我这里
- 传进指针,生成有空格的字符串副本再拷贝给自己 */
- void insert(char *str, int len)
- {
- char temp[40] = {0}; // 这个数组最好大一点,防止越界
- int i = 0;
- for ( ; i < len; i++ )
- {
- temp[2*i] = str[i];
- temp[2*i+1] = ' ';
- }
- strcpy_s(str, 40, temp); // 把处理好的字符串给写回去
- }
- /* 函数加_s的是VS编译器的安全函数,加了操作字符串的长度
- 不是VS编译器的可以不考虑,但是要自己注意边界 */
- int main()
- {
- char str[40] = {0}; // 直接就给初始化,让里面所有元素都为'\0'
- printf("请输入语句: ");
- scanf_s("%s", str, 20);
- int len = strlen(str);
- change(str, len);
- insert(str, len);
- printf("%s\n",str);
- system("pause");
- return 0;
- }
复制代码
|
最佳答案
查看完整内容
1. change函数你的else if判断的条件不是比较,是赋值,你将“==”写成了“=”,所以不管里面是什么都变了。
2. 就是change内的函数操作不当引起的。
我写一个我的代码,你可以参考下,优化下你的代码。(只是个人理解)
|