大头飞飞 2020-09-02 08:00 采纳率: 50%
浏览 89
已采纳

请教大家c语言中指针操作

  1. 程序目的:我编写了一个字符串输入的函数,函数中采用指针表示每个字符的处理位置;
  2. 问题描述:无法将输入的字符成功转化为小写;
  3. 所做的尝试: 3.1 进一步尝试发现st并不是一个字符串,而且strlen(st)返回值是0。 3.2 如果用数组表示法,则可以正常运行且能够将输入的字符转换成小写字符。
  4. 代码如下:

#include
#include
#include
#define ANSWER "Grant"
#define SIZE 40
char *s_gets(char * st, int n);

int main (void)
{
char try1[SIZE];
char answer[] = ANSWER;
int i = 0;
while(answer[i])
{
answer[i] = tolower(answer[i]);
i++;
}

puts("Who is buried in Grant's tomb?");
s_gets(try1, SIZE);

while(strcmp(try1, answer) !=0)
{
    puts("No, that's wrong. Try again.");
    s_gets(try1, SIZE);

}

puts("That's Right!");

return 0;

}

char * s_gets(char * st, int n)
{
char * ret_val;
char * pc;
int j = 0;

ret_val = fgets(st, n, stdin);

if(ret_val)
{
 while((*st) != '\n' && (*st) != '\0')
      {
          st++; 
   }    
   if ((*st) == '\n')
       {

           (*st) = '\0';
   }
   else
       while(getchar() != '\n')
           continue;
}
while(st[j])
{
    st[j] = tolower(st[j]);
    j++;
}
return ret_val;

}

以下程序可以正常运行

char * ret_val;
int i = 0, j = 0;

ret_val = fgets(st, n, stdin);
if(ret_val)
{
   while(st[i] != '\n' && st[i] != '\0')
      i++;
   if (st[i] == '\n')
       st[i] = '\0';
   else
       while(getchar() != '\n')
           continue;
}

    while(st[j])
{
    st[j] = tolower(st[j]);
    j++;
}
    return ret_val;

}*/

  • 写回答

2条回答 默认 最新

  • qq_31043287 2020-09-02 09:49
    关注

    char * s_gets(char * st, int n)
    {
    char * ret_val;
    char * trans;
    int j = 0;

    ret_val = fgets(st, n, stdin);
    //将ret_val的首地址赋给trans,保证后面只是trans的地址改变,ret_val的地址不变
    trans = ret_val;
    if (trans)
    {
        while ((*trans) != '\n' && (*trans) != '\0')
        {
            //新增
            if (*trans >= 'A' && *trans <= 'Z')
            {
                *trans = *trans + 32;
                printf(ret_val);
            }
    
            //该循环结束,位置已经将trans指向了输入字符串的最后+1的地址,内容将为NULL
            //st++;
            trans++;
        }
        return ret_val;
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分