C语言,从左至右怎么实现两两字符互换?
本帖最后由 Danmoits 于 2020-11-5 13:56 编辑#include<stdio.h>
int main()
{
int k,count=0;
char n;
printf("请输入一个1到26之间的整数:\n");
scanf("%d",&k);
printf("请输入一个仅有英文大写字母、逗号、句点和空格符组成的英文句子,且字符数不超过80个:");
for(count=0;(char=getchar())!=EOF;count++)
{
if(char>64&&char<91)
{
char=char+k-1;
if(char>90)char-=26;
if(count>80) break;
putchar(char);
}
elseputchar(char);
}
return 0;
}
题目要求是:输入一个仅有英文大写字母、逗号、句点和空格组成的英文句子(字符数不超过80)和正整数k(1到26),将其中的大写英文字母替换成字母表中该字母开始的第k个字母,其他字符保持不变。例如,k取9时,A替换成I,Y替换成G。为了使原句难于破译,再将上述转换后的句子自左至右两两字符交换,若最后仅剩下单个字符则不换,输出最后的密文句子。
我想用数组实现两两字符交换,但是
for(count=0;(char=getchar())!=EOF;count++)
这一行总是报错。
请:1.提供其它方法实现字符交换 2.帮我看看为什么这句话会报错
谢谢! 两两交换已经帮你实现了,顺便帮你修改了一些问题
报错那句是因为你写作了,定义的是数组n,但是你写成了char,这是关键字,不能做变量名
#include<stdio.h>
int main()
{
int k,count=0;
char n,temp;//数组长度要多1个,用于存放结尾字符
printf("请输入一个1到26之间的整数:\n");
scanf("%d",&k);
getchar();//清除scanf遗留的回车字符
printf("请输入一个仅有英文大写字母、逗号、句点和空格符组成的英文句子,且字符数不超过80个:");
for(count=0;(n=getchar())!='\n';count++)//最好是以回车作为结束,EOF会出问题
{
if(count==80) break;
if(n>='A'&&n<='Z')
n=(n-'A'+k-1)%26+'A';
putchar(n);
}
n='\0';//添加字符串结尾字符
printf("\n大写转换结果:%s",n);
count=0;
while(n!='\0')
{
if (n=='\0')
break;
temp=n;
n=n;
n=temp;
count+=2;
}
printf("\n两两交换结果:%s",n);
return 0;
}
本帖最后由 jackz007 于 2020-11-5 16:05 编辑
#include <stdio.h>
char * crypt(char * s , const int d)
{
for(int k = 0 ; s ; k ++) {
if(s >= 'A' && s <= 'Z') {
s += d ;
if(s > 'Z') s -= 26 ;
else if(s < 'A') s += 26 ;
}
if(k % 2) {
int c = s ;
s = s ;
s = c ;
}
}
return s ;
}
main(void)
{
char c , s ;
int d , m ;
scanf("%d" , & d) ;
fflush(stdin) ;
for(m = 0 ; m < 80 && (c = getchar()) != '\n' ; m ++) s = c ;
s = '\0' ;
printf("%s\n" , s) ;
printf("%s\n" , crypt(s , d)) ;
printf("%s\n" , crypt(s , -d)) ;
} 遍历,两两swap?
页:
[1]