cuilllinn 2021-06-30 22:15 采纳率: 100%
浏览 24
已采纳

牛客网刷题遇到的问题

问题描述:接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000) 输入一行,为只包含小写字母的一个字符串 输出这个字符串的反转字符串 c++ 我写的程序如下:

#include <stdio.h>
#include <string.h>
int main(void)
{
    char str[1000] = {};
    scanf("%s", &str);
    int num = strlen(str);
    for(int i = 0; i < num / 2; i++){
        char mid = str[i];
        str[i] = str[num - i - 1];
        str[num - i - 1] = mid;
        }
    printf("%s", str);
    return 0;
}

问题1:我看题解没有人以这样的思路写,这样写是有什么弊端么?内存什么的? 问题2:如何确保输入字符串必须为全部小写,否则报错,没有查到我想要的程序- -

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-07-01 04:47
    关注

    代码主要有一个绝对的错误,scanf("%s",&str)改为scanf("%s",str);字符串变量不用再取地址了

    其它地方没毛病,这样交换方法是比较正常的做法,为什么说别人没这样的思路呢?内存没问题,下标之和为n-1是OK的

    对于只接收小写字符的问题,一是在输入时逐个字符接收,遇到非小写字母则输入结束;二是对输入完的str进行扫描,可以另建一个数组,将所有小写字符复制到新数组,然后对新数组进行逆序(当然,继续保留在str也行,不过相对复杂,需要不断移动字符位置并修改字符串大小值)。采用哪种方案,看你的需求确定了。

    参考代码: 1、只接收小写字母输入,遇到非小写字母则终止输入,并自动计算出num,不需要strlen(str)计算了

    int num = 0;
    char c = getchar();
    while( c>='a' && c<='z' )  //从控制台流中读取字符,非小写字母则结束输入
    {
      str[num++] = c;
      c = getchar();
    }
    

    2、对所有输入进行小写字母过滤,并自动计算出num,不需要strlen(str)计算了

    char str1[1000] = {0};
    int num = 0;
    scanf("%s",str1);
    for(int k=0;str1[k] != 0; k++)
    {
      if(str1[k] >= 'a' && str1[k] <= 'z')
        str[num++] = str1[k];
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来