2

我编写了这个函数来将预设的小写 str 转换为它的大写变体。我已经尝试了所有我知道的将小写转换为大写的不同配置,但是当我打印它时。它仍然以小写形式结束。所以我有点卡住了。

char* stoupper(char str[]);

char str[100]= "uppercase";

printf("%s" , stoupper(str)); // Test to make sure it is working 

char* stoupper(char str[])
{ 
      int i = 0; 

      while(str[i] != '\0') 
      { 
                   if(str[i] >= 'A' && str[i] <= 'Z') 
                   str[i] = str[i] + ('A' - 'a'); 
                   i++; 
      }
      return str;
}  

/* I've tried various variations of this function this is just the one i had first */ 
4

4 回答 4

3

您的代码只修改了已经大写的字母,并将它们变成了谁知道什么(好吧,我相信您可以使用 ASCII 表弄清楚)。如果要对小写字母进行操作,则需要更改if条件:

if (str[i] >= 'a' && str[i] <= 'z') 
于 2013-04-15T23:48:53.567 回答
2

你为什么要重新发明轮子?ctype.h 是你的朋友

使用 toupper(int) 方法。就像是

char* stoupper(char str[]);

char str[100]= "uppercase";

printf("%s" , stoupper(str)); // Test to make sure it is working 

char* stoupper(char str[])
{ 
      int i = 0; 

      while(str[i]) 
      { 
          str[i]=toupper(str[i]);
          i++; 
      }
      return str;
}  
于 2013-04-15T23:49:48.700 回答
1

我认为你的 if 条件应该是:

if(str[i] >= 'a' && str[i] <= 'z') 
于 2013-04-15T23:50:15.633 回答
0

if 语句中的条件需要更改

if(str[i] >= 'A' && str[i] <= 'Z')

我可以建议另一种将大写字母更改为小写字母的方法,反之亦然

char* stoupper(char str[])
{ 
      for(int i=0;i<strlen(str);i++)
          if(!(str[i]>='A'&&str[i]<='Z')){
              str[i]=str[i]^' ';
          }

      return str;
} 

这种方法有效,因为

[小写字符的 ASCII 值] XOR [' ' 的 ASCII 值] =[大写相同字符的 ASCII 值]

于 2014-06-16T14:18:03.317 回答