anlong 发表于 2018-10-22 22:11:14

求助!!C语言作业!

从键盘任意输入五个字母,然后每个字母加密的时候用它后面第四个字母替换,如输入字母a就换成字母e,但是如果输入字母w就要换成字母a,就要换成b,以此类推
要求使用 if 和 else语句!!!
把中间的字符去掉!怎么弄呀!求助!

claws0n 发表于 2018-10-22 22:24:56

用 while( (c = getchar()) ... ),然后 if else 就好啦~~

Mountain_gs 发表于 2018-10-23 13:44:32

#include<stdio.h>
#include<iostream>
using namespace std;

char Lockalpha(char alpha)
{
        int ascII = (int)alpha;
        //输入是大写字母
        if (ascII >= 65 && ascII <= 90)
        {
                ascII = (ascII - 65 + 4) % 26 + 65;
                return (char)ascII;
        }
        //输入是小写字母
        else if(ascII>=97 && ascII<=122)
        {
                ascII = (ascII - 97 + 4) % 26 + 97;
                return (char)ascII;
        }
        //输入的不是字母,返回‘F’
        else
        {
                return 'F';
        }
}

int main()
{
        char alpha;
        char ch;
        for (int i = 0; i < 5; i++)
        {
                cin >> ch;
                alpha = Lockalpha(ch);
        }
        for (int i = 0; i < 5; i++)
        {
                cout << alpha;
        }
        system("pause");
}
c语言我没学过,不过C++应该一样。
主要的算法在Lockalpha()函数里面,先把获得的字符转换成ascII码,小写字母的ascII是97-122,先减去97在加4.之后用26取余就能得到加密后的字母在字母表中的位置,再加上97后转换成字符就能得到加密后的数字。
在主函数调用这个函数就行了。

Mountain_gs 发表于 2018-10-23 13:47:12

Mountain_gs 发表于 2018-10-23 13:44
c语言我没学过,不过C++应该一样。
主要的算法在Lockalpha()函数里面,先把获得的字符转换成ascII码, ...

如果输入的不是字符那个地方不能返回‘F’,会和B的返回值一样。改成随意一个不是字母的字符就行了

helloconan 发表于 2018-10-23 14:20:41

#include<stdio.h>
int main()
{
    int i;
    char ch;
    printf("Please enter five letters:");
    for(i = 0; i < 5; i++)
    {
      ch = getchar();
      //检测输入是否为字母
      if((ch >= 'a')&&(ch <= 'z')||(ch >= 'A')&&(ch <= 'Z'))
      {
            //小写情况
            if(ch == 'w')
                printf("a");
            else if(ch == 'x')
                printf("b");
            else if(ch == 'y')
                printf("c");
            else if(ch == 'z')
                printf("d");
            //大写情况
            else if(ch == 'W')
                printf("A");
            else if(ch == 'X')
                printf("B");
            else if(ch == 'Y')
                printf("C");
            else if(ch == 'Z')
                printf("D");
            //其他字母
            else printf("%c",ch + 4);
      }
      else printf("");
    }
    return 0;
}

helloconan 发表于 2018-10-23 14:23:48

代码在上面,应该能满足需求{:10_257:}

pheron 发表于 2018-10-23 16:35:37

helloconan 发表于 2018-10-23 14:20


for(i = 0; i < 5; i++)不合适,输入5个空格的话直接就没有输出了,要求是替换5个字母并把中间的非字母去掉

pheron 发表于 2018-10-23 16:37:40

本帖最后由 pheron 于 2018-10-25 17:46 编辑

理论上可行,并没实际调试,大量使用if else
#include<stdio.h>

int main(void)
{
        char ch;
        int i = 0;
       
        while(i < 5)
        {
                ch = getchar();
                if('A'<ch && ch<'Z')
                {
                        if(ch+4 > 'Z')
                                putchar(ch+4-26);
                        else
                                putchar(ch+4);
                       
                        i++;
                }
                else if('a'<ch && ch<'z')
                {
                        if(ch+4 > 'z')
                                putchar(ch+4-26);
                        else
                                putchar(ch+4);
                       
                        i++;
                }
                else
                        ;
        }
        printf("\n");
        return 0;
}

helloconan 发表于 2018-10-23 17:46:30

pheron 发表于 2018-10-23 16:35
for(i = 0; i < 5; i++)不合适,输入5个空格的话直接就没有输出了,要求是替换5个字母并把中间的非字母 ...

若输入5个空格,按题意不应该没有输出才合乎要求吗?

anlong 发表于 2018-10-25 17:28:45

谢谢各位!!!!!!

2164930278 发表于 2019-5-6 12:02:14

Mountain_gs 发表于 2018-10-23 13:44
c语言我没学过,不过C++应该一样。
主要的算法在Lockalpha()函数里面,先把获得的字符转换成ascII码, ...

谢谢
页: [1]
查看完整版本: 求助!!C语言作业!