我需要从main函数中读取一个单词并在UCASE中转换字符,如果第一个字符是LCASE,反之亦然,使用用户定义的函数。我尝试了从函数返回数组的方法,但我仍缺乏一些核心思想。请调试此程序并解释它的工作方式。
#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);
}
答案 0 :(得分:0)
此处已存在问题: 所以如果你说这段代码是完美的,你希望我们调试它并解释它(在地球上)的工作方式,那么就去吧。
在功能int* low (char str)
中,您有if(str[i]<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()
的两个函数,它总是返回一个固定值。所以,而不是
for (i=0; i<strlen(str);i++)
我建议,
size_t strlength = strlen(str);
for (i=0; i < strlength; i++)
答案 1 :(得分:0)
您可以尝试以下代码和方法:
#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);
}