18.3.21(NBUOJ)

1057 字符变换

  • 思路:既可以用strlen函数来获取字符串长度,也可以用\0来判断,但注意不要把strlen函数放在整个循环里面,这样每次都要计算一下就会多花时间。
  • 代码:
    gets(seq);
    for(int i=0;seq[i]!='\0';i++){
        if(seq[i]<='z'&&seq[i]>='a'){
            seq[i]+='A'-'a';
        }
        else if(seq[i]<='Z'&&seq[i]>='A'){
            seq[i]+=32;
        }
    }
puts(seq);

1144 回文数字

  • 思路:只需要判断一半就好,如果是奇数,最中间的不需要判断。
  • 代码:
    int len=strlen(seq);
    int flag=1;
    for(int i=0;i<len/2;i++){
        if(seq[i] != seq[len-i-1]){
            flag=0;
            break;
        }
    }
    if(flag) printf("Yes\n");
else printf("No\n");

1054 相邻字符判相等

  • 思路:直接用存储的字符就可以判断
  • 代码
    char ch=NULL;
    for(int i=1;seq[i]!='\0';i++){
        if(seq[i] == seq[i-1]){
            ch=seq[i];
            break;
        }
    }
    if(ch) printf("%c\n",ch);
    else printf("No\n");

1139 单词译码

思路:看到循环可以想到依旧利用取模(%),用判断也可以。

代码:

    for(int i=0;seq[i]!='\0';i++){
        if(seq[i] <='z'&& seq[i]>='a'){
            seq[i]='a'+(seq[i]-'a'+4)%26;
        }
        else if(seq[i]<='Z'&&seq[i]>='A'){
            seq[i]='A'+(seq[i]-'A'+4)%26;
        }
}

1187 数字提取

  • 思路:只要把数字输出就好了
  • 代码:
    for(int i=0;seq[i]!='\0';i++){
        if(seq[i] <='9'&& seq[i]>='0'){
            printf("%c",seq[i]);
        }
    }
    printf("\n");

1336 镜像文字

  • 思路1:把数组开大点,后面一部分存储前部分的镜像,最后再加个’\0’。代码略
  • 思路2:直接输出就好
  • 代码:
    int i;
    for(i=0;seq[i]!='\0';i++){
        printf("%c",seq[i]);
    }
    for(i-=2;i>=0;i--){
        printf("%c",seq[i]);
    }
    printf("\n");

1201 输出最短字符串

  • 思路:是第一个或者找到更短的存一下就好
  • 代码:
    for(i=0;i<5;i++){
        gets(curseq);
        if(i==0 || len>strlen(curseq)){
            len=strlen(curseq);
            strcpy(minseq,curseq);
        }
    }
    puts(minseq);

1159 字母出现频率

  • 代码:
    for(i=0;seq[i]!='\0';i++){
        if(seq[i]<='z'&&seq[i]>='a'){
            data[seq[i]-'a']++;
        }
        else if(seq[i]<='Z'&&seq[i]>='A'){
            data[seq[i]-'A']++;
        }
    }
    for(i=0;i<26;i++){
        if(data[i]){
            printf("'%c':%d\n",i+'A',data[i]);
        }
    }


小结

  1.  看到一些小可爱不会用N,这里我再解释一下。你define了一个变量N,这个变量就定住了,不能变了,所以才可以用做数组大小。但是你定义过后既不能在输入的时候给它赋值,也不能改变它的值了。后面输入了字符串,字符串的长度不一定等于N,不能用N来代替。我经验中define一般是要在多次使用某个固定数据或者变量或者语句,并且这个语句比较长,你不想写那么多次的时候用。
  2. 一些小可爱不知道该如何判断一个字符串结束才好,我给出的参考代码里面你们可以看到,我用了两种方法,一种是include一个string.h头文件,用strlen函数求字符串长度。还有一种是结尾是’\0’的时候表示结束。如果不需要知道长度,我倾向于后者,简单快捷。
  3. 对于结尾为’\0’表示结束这一点我还要再提一下,有小可爱把一些字符存到另一个数组,最后直接一下子输出了(printf或者puts),但是计算机不会记录你刚刚往里面存了多少个字符,它只会找结束标志’\0’判断是不是该停止,如果你没有在结尾加上’\0’,那么大概率上函数会继续往下输出脏数据直到碰到’\0’。如果说你IDE上输出是正确的,那么你基本上只是幸运地碰到后面刚好是’\0’,或者由于一些IDE的某种特性(比如分配内存的数据初始化为’\0’, 多次使用后就不行了)导致你能看到正确结果。另外小心不要把'\0'写为'\n'了~



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值