算法练习(二)

P020801

image.png

tips:

  1. fgetc(fin):它读取一个打开的文件fin,读取每一个字符,然后返回一个int值,如果文件结束,fgetc返回一个特殊标记EOF

  2. getchar():从标准输入读取每一个字符,等价于fgetc(stdin)
  3. 在使用fgetc和getchar时,应该尽量避免写出和操作系统相关的程序
  4. fgetc(buf,maxn,fin):读取完整的一行放在字符数组buf中,且不会读取超过maxn-1个字符
  5. C语言不会禁止程序读写”非法内存“,例如声明的是char s[100],完全可以赋值s[10000]='a',但是后果自负
  6. C语言中的gets(s)函数存在缓冲区溢出漏洞,在C11标准里面已经被删除

A020801

#include<stdio.h> 
int main(){
    int c, q = 1;
    while((c = getchar()) != EOF){
        if(c == '"'){
            printf("%s",q?"``":"''");
            q=!q;
        }
        else{
            printf("%c",c);
        }
    }
    return 0;
        
}

P020802

1.png

A020802

#include<stdio.h>
char s[]="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main(){
    int i,c;
    while((c=getchar())!=EOF){
        for(i=1;s[i] && s[i]!=c;i++);       
        if(s[i])
            putchar(s[i-1]);
        else
            putchar(c);
    }
    return 0;
}

P020803

2.png

image.png

镜像字符串就,通俗来说,在纸上写一个A,然后再A的右边放一面镜子,在镜子里看到到依然是字符A,而像(3,E),(J,L)等的大概就是长得像吧。

比如3AIAE,3和E,A和A,I和I

image.png

A020803

#include<stdio.h>
#include<string.h>
#include<ctype.h>

const char* rev = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
const char* msg[] = {"not a palindrome","a regular palindrome","a mirrored str","a mirrored palindrome"};

char r(char ch){
    if(isalpha(ch))
        return rev[ch-'A'];
    return rev[ch-'0'+25];
}

int main(){
    char s[30];
    while(scanf("%s",s) == 1){
        int len = strlen(s);
        int p = 1,m = 1;
        for(int i=0;i<(len+1)/2;i++){
            if(s[i] != s[len-1-i])
                p = 0;
            if(r(s[i]) != s[len-1-i])
                m = 0;
        }
        printf("%s -- is %s.\n\n",s,msg[m*2+p]);
    }   
    return 0;
}

tips:

  1. isalpha:判断字符是否为字母;类似的还有idigit、isprint等,再ctype.h中定义
  2. toupper/tolower:转换大小写

猜你喜欢

转载自www.cnblogs.com/CH42e/p/12286344.html