第5章 基础题目选编(5.1 字符串)

来源:互联网 发布:.cx域名行情 编辑:程序博客网 时间:2024/06/10 18:26

5.1.1  WERTYU
题目描述:见参考书
【分析】

       枚举键盘上的所有字符——一个字符串,将其存入字符数组或用字符指针指向它,之后,在循环中寻找输入字符在字符串中的位置,当确定该位置后,将该字符输出。注意,还需考虑输入字符在字符串中不存在时的处理情况,如空格等符号。参考代码如下:

#include<stdio.h>#include<string.h>char *s="`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";int main(){char c;int i;while((c=getchar())!=EOF){ //利用空循环确定输入字符c在字符串s中的位置,s[i]用来设定未找到时的循环结束for(i=1;s[i]&&s[i]!=c;i++);if(s[i]){putchar(s[i-1]);}else{putchar(c);}}return 1;}

5.1.2  Tex括号

题目描述:见参考书

【分析】

       判断“ " ”出现时其前面是否出现过“ " ”,若出现过,则输出“    ”,反之,则输出“    ”。因此,可设置一个标志位,值为0或1,由其控制是否出现。参考代码如下:

#include<stdio.h>int main(){char c;int flag=1;while((c=getchar())!=EOF){if(c=='"'){if(flag){printf("\“"); flag=0; }else{printf("\”"); }}else{printf("%c",c);}}return 1;}

5.1.3  周期串

题目描述:见参考书

【分析】

       依次判断第i个元素与第i+j个元素是否相等,若一直相等,则j即为最小周期。参考代码如下:

#include<stdio.h>#include<string.h>int main(){int i,j; char s[81];scanf("%s",s);for(j=1;j<=strlen(s)/2;j++){ //周期必然可以整除字符串长度 if(strlen(s)%j==0){//从i开始,判断i之后第j个元素与第i个元素是否相等 for(i=0;i+j<strlen(s);i++){if(s[i]!=s[i+j]){break;}} //若条件成立,说明for循环正常结束,没有触发for循环中的if条件 //即元素i与其之后第j个元素均相等,则此时,j即为所求周期,查找结束

if(i+j>=strlen(s)){break;}}}printf("%d\n",j);return 1;}

本周作业:HDOJ2027  1088  1339  1219  1019  1200  1061  2017  2007  1073

0 0
原创粉丝点击