我已经编写了此函数来将预设的小写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 */ 

===============>>#1 票数:3

您的代码只会修改已经大写的字母,并将它们转换为“谁知道”的内容(嗯,我敢肯定,您可以使用ASCII表来弄清楚)。 如果要使用小写字母,则需要更改if条件:

if (str[i] >= 'a' && str[i] <= 'z') 

===============>>#2 票数: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;
}  

===============>>#3 票数:1

我认为您的条件应为:

if(str[i] >= 'a' && str[i] <= 'z') 

===============>>#4 票数:0

您的条件是否需要更改

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值]

  ask by Cody Rogers translate from so

未解决问题?本站智能推荐: