【问题标题】:Error with the array returning through function通过函数返回的数组出错
【发布时间】:2018-03-06 06:25:46
【问题描述】:

如果第一个字符是 LCASE,我需要从主函数中读取一个单词并转换 UCASE 中的字符,反之亦然,使用用户定义的函数。我尝试了从函数返回数组的方法,但我仍然缺乏一些核心思想.请调试这个程序并解释它的工作方式。

#include <stdio.h>
#include <string.h>
int* low (char str)
{
    int i;
   for (i=1; i<strlen(str);i++)
    {
        if(str[i]<91)
        {
            str[i]=str[i]+32;
        }
        else
        {

        }
    }
    return &str;
}
int* high (char str[50])
{
    int i;
    for (i=0; i<strlen(str);i++)
    {
        if(str[i]>91)
        {
            str[i]=str[i]-32;
        }
        else
        {

        }
    }
    return &str;
}
void main()
{
    char str[50];
    char* strl;
    printf("Enter any string....\n");
    scanf("%s",str);
    if (str[0]<91)
    {
        *strl=low(str);
    }
    else
    {
        *strl=high(str);
    }
    printf("Converted string is %s.",*strl);
}

【问题讨论】:

    标签: c string user-defined-functions


    【解决方案1】:

    这里已经有问题了: 因此,如果您说这段代码是完美的,并且希望我们对其进行调试并解释(实际上)它是如何工作的,那么就可以了。

    在函数int* low (char str) 中,你有if(str[i]&lt;91)。那是一个问题。 str 是作为参数接收的char,因此str[i] 是直接编译时错误。

    另一个要处理的是return语句。 你有一个声明:

    return &str;
    

    这将返回str 的地址,顺便说一下,这是一个char,而函数low 应该返回一个指向int 的指针。

    同样适用于high函数。

    建议:抛开这些糟糕的代码,先买一本初级 C 编程书籍。阅读并尝试其中的一些代码。


    一些改进意见:(您可能不理解)

    改变

    void main()
    

    int main(void)
    

    为什么?参考这个传说中的帖子:What should main() return in C and C++?

    其次,将您在循环中使用的strlen() 的两个函数都设置为int,它将始终返回一个固定值。所以,而不是

    for (i=0; i<strlen(str);i++)
    

    我建议,

    size_t strlength = strlen(str);
    for (i=0; i < strlength; i++)
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的代码和方法:

      #include <stdio.h>
      #include <string.h>
      
      char* caseConverter (char *str)
      {
          int i;
          for (i=0; i<strlen(str);i++)
          {
              if(str[i]>=65 && str[i]<=90)
              {
                  str[i]=str[i]+32; //To lower case
              }
              else if((str[i]>=97 && str[i]<=122))
              {
                  str[i]=str[i]-32; //To upper case
              }
              else
              printf("%c is not an alphabet \n",str[i]);
          }
          return str;
      }
      void main()
      {
          char inputStr[50]= "Stubborn";
          char* opStr= caseConverter(inputStr);
          printf("Converted string is %s",opStr);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-01-10
        • 1970-01-01
        • 2022-11-11
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2020-09-01
        相关资源
        最近更新 更多