第七课字符加密中的一个问题
群里有人这样一个问题: 输入字符串后 我们如何开辟一个大小合理的空间 以 处理输入的字符串有几个函数 大家可以看一下
malloc 开辟空间 这个视频里我们讲过
strlen 计算字符串的长度
假如我们输入的是: ChinaPYG!strlen是求该字符串的长度 结果=9 其实该字符串还有一个结束标志 就是'\0' 我们开空间的时候 可以多开一个字节的空间把这个也COPY过去
放一个示例代码,仅处理下大写字母:
#include "stdio.h"
void JiaMi(char *p,int i)
{
while(*p)
{
if(*p >= 'A' && *p<= 'Z')
{
*p++=(*p-'A'+i)%24+'A';
}
}
}
main()
{
char str;
char * p;
int i;
gets(str); /*scanf("%s",str);*/
puts(str);
printf("Shuru zifu: %d\n",strlen(str));
p = (char *)malloc(strlen(str)+1);
memcpy(p,str,strlen(str)+1);
puts(p);
printf("Shuru Jiami: ");
scanf("%d",&i);
JiaMi(p,i);
printf("Jiami XiaoGuo: ");
puts(p);
}
想要处理含有非大写字符的字符串, 自己加一行代码即可 ~
C:\tc>test
ChinaPYG!
ChinaPYG!
Shuru zifu: 9
ChinaPYG!
Shuru Jiami: 10
Jiami XiaoGuo: MhinaBKQ!
这个Demo 仅供参考 完整的代码 大家自己去补充下吧 不是啊
我的怎么可以动行小写的字啊 呵呵
打错字到哈
是个运行哈 沙发也坐了
呵呵/:017
[ 本帖最后由 hackerdiy 于 2009-5-25 10:13 编辑 ] 楼上可怜了。。
加密那个 正书上有 为以前看过 不过已经忘记了
打算自己不看书搞一遍 再回去对照 日期:2009-5-25
10:09:40
我的想法就是,如果开的太大,而实际用的很小,就太浪费内存空间了
10:09:53
我的怎么可以运行小写的啊
Nisy(3317759) 10:10:09
哦 你说的是输入的时候 根据输入的长度 开空间呀
Nisy(3317759) 10:10:13
那不行的 输入的字符必须要放入我们申请的合法空间 动态申请的或静态申请的 否则输入的字符错误的存放到了 内存中系统数据的空间 程序将马上崩溃
10:14:17
赋值语句可以直接把\0传递过去,memcpy()不行
10:14:48
memcpy 是内存COPY只和长度有关 和其他什么字符之类的一点关系也没有
10:17:33
嗯,老大,你程序里的strlen(str)+1完全可以用sizeof(str)代替吧?那样就自动把\0传递过去了,对吧
Nisy(3317759)10:18:02
sizeof(str) 你试试 计算机语言之所以一定可以学会 就在于 答案就在你的手下 strlen的实现方式是检测\0
int strlen(char *p)
{
int res=0;
while(*p++!='\0')
res++;
return res;
}
加密的加三是加密,那么反向-3应该就是解密,所以其实一个函数就可以了。
页:
[1]