• “第六十三天”


             这两天怎么做的这么别扭,为什么我的vs 的strlen函数包括终止字符了;

            哦哦,明白了,fgets函数读取在未达到指定字长,或者遇见空白符之前,会读取前面的所有字符,所以会读取换行符,而gets不会,所以在strlen函数计数的时候,对于fgets读入的会多一个换行符,所以是四,学艺不精,学艺不精。

     

    这个学来一个新东西,字母的判断,大小写字母的判断,以及大小写字母的转换

    它们都是在同一个库函数    

    判断是否是字母的函数是   :  isalpha(); 

    大小写字母的判断分别是  :  isupper()  ;   和   islower()   ;   前者是大写判断;

    大小写字母转换是 :    toupper()  ;   和      tolower()  ;   前者是小写转大写;

    上面函数括号里面放的都是需要判断的字符;  是的话,返回真。

    大小写转换的话。如果满足大小写则转换成对应的大写或小写,然后返回,如果不满足的话,则不做改变,返回原来值。

     这个题说的长度小于50,可是我把数组长度扩大到100它才给我全过,这个又是为什么?

    1. #include<stdio.h>
    2. #include<string.h>
    3. #include<ctype.h>
    4. int main()
    5. {
    6. char ch[100] = { 0 };
    7. fgets(ch, 100, stdin);
    8. int i = 0;
    9. int n = strlen(ch);
    10. for (i = 0; i < n; i++)
    11. {
    12. if (islower(ch[i]))
    13. {
    14. ch[i] = (ch[i] - 'a' + 3) % 26 + 'a';
    15. ch[i] = toupper(ch[i]);
    16. }
    17. else
    18. {
    19. ch[i] = (ch[i] - 'A' + 3) % 26 + 'A';
    20. ch[i] = tolower(ch[i]);
    21. }
    22. }
    23. for (i = n-1; i >= 0; i--)
    24. {
    25. printf("%c", ch[i]);
    26. }
    27. return 0;
    28. }

    昨天的那个成了,把时间复杂度从n^2变成了n,我真的感觉我把 数组里的字符减去A 当作其他数组的下标还蛮厉害的,hh。

    1. #include<string.h>
    2. int main()
    3. {
    4. char a[2][101] = { 0 };//这里用两行是方便读入字符串;要不然要用循环读;
    5. char b[101] = { 0 };
    6. scanf("%s %s %s", a[0], a[1], b);
    7. int na = strlen(a[0]), nc = strlen(b);
    8. int c[26] = { 0 }, d[2][26] = { 0 }; int i = 0;
    9. for (i = 0; i < na; i++)
    10. {
    11. //a[1]是原信息。
    12. c[(a[1][i] - 'A')]++;//记录每个字母是否都出现过。出现则加一,A对应的是c[0],Z对应的是c[25]。
    13. if (d[0][(a[0][i] - 'A')] != a[1][i])//这里是判断是否满足不同字母对应不同密字,
    14. //这里用a[0][i]-'A'当下标是即使位置不一样,但存储的字母一样的话,那么下标就是一样的,
    15. //那么就判断同一个字母对应的原信息一样不一样
    16. {
    17. d[0][(a[0][i] - 'A')] = a[1][i];
    18. d[1][(a[0][i] - 'A')]++;
    19. }
    20. }
    21. //判断是否满足两个条件
    22. for (i = 0; i < 26; i++)
    23. {
    24. if (c[i] == 0)
    25. {
    26. printf("Failed\n"); return 0;
    27. }
    28. if (d[1][i] > 1)
    29. {
    30. printf("Failed\n"); return 0;
    31. }
    32. }
    33. //解密,打印
    34. for (i = 0; i < nc; i++)
    35. {
    36. printf("%c", d[0][(b[i] - 'A')]);//上面在判断是否相等的时候存了每个加密字符对应的原信息
    37. }
    38. return 0;
    39. }

  • 相关阅读:
    rmq-dashboard消息查询
    区块链智能合约
    牛客[NOIP2016]蚯蚓
    java项目-第129期ssh的便利店运营管理系统-java毕业设计_计算机毕业设计
    Bootstrap 框架学习笔记(基础)
    Springboot整合RabbitMQ详解
    C++ 产生随机数函数
    SpringBoot自动装配原理
    基于node.js和Vue的音乐管理系统 /音乐网站的设计与实现
    Docker11:CMD和 ENTRYPOINT的区别+实战:tomcat镜像
  • 原文地址:https://blog.csdn.net/hh12137/article/details/134275288