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 に答える