重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言代码和运行结果如下:
创新互联建站是一家专注于成都网站建设、做网站与策划设计,南昌网站建设哪家好?创新互联建站做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:南昌等地区。南昌做网站价格咨询:18982081108
输出符合示例,加解密均正确,望采纳~
附源码链接:字符串加解密
/*解决一般长度的可以。。因为使用了朴素的字符串匹配算法,所以效率不算高,KMP算法更好一些。
以下是源码:*/
/*strstr function*/
#includestring.h
char *(strstr)(const char *s1, const char *s2)
{ /* find first occurrence of s2[] in s1[] */
if (*s2 == '\0')
return ((char*)s1);
for (; (s1 = strchr(s1, *s2)) != NULL; ++s1){/*match rest of prefix*/
const char *sc1, *sc2;
for (sc1 = s1, sc2 = s2;;)
if (*++sc2 == '\0')
return ((char *)s1);
else if (*++sc1 != *sc2)
break;
}
return (NULL);
}
/*strchr function*/
#includestring.h
char *(strchr)(const char *s, int c)
{ /* find first occurrence of c in char s[] */
const char ch = c;
for (; *s != ch; ++s)
if (*s == '\0')
return (NULL);
return ((char*) s);
}
/*
请输入十六进制数 : 120
十 六 进 制 数: 120
十 进 制 数: 288
Press any key to continue
*/
#include ctype.h
#include stdio.h
#define MAX 10
#define NewLine 10
main () {
char num16[MAX];
unsigned long cocnvertfactor = 1,num10 = 0;
char ch,j,i = 0;
printf("请输入十六进制数 : ");
while (((ch = getchar()) != NewLine) (i MAX))
if ((ch = '0' ch = '9') || (ch = 'A' ch = 'F') || (ch = 'a' ch = 'f'))
num16[i++] = ch; // 仅接收数字和英文前6个字母
for (j = 0;j i;j++) num16[j] = toupper(num16[j]); // 小写字母转换成大写,其他字符不变
for (j = i - 1;j = 0;j--) { // 开始转换
if (isalpha(num16[j])) num10 = num10 + cocnvertfactor*(num16[j] - 'A' + 10);
else num10 = num10 + cocnvertfactor*(num16[j] - '0');
cocnvertfactor = 16*cocnvertfactor;
}
printf("\n十 六 进 制 数: ");
for (j = 0;j i;j++) printf("%c",num16[j]);
printf("\n十 进 制 数: %u\n\n\n",num10);
}