関数の名前はToLower()
、ANSI C バージョンの , を書き直していることを示していますtolower()
(つまり、1 つの文字を大文字から小文字に変更している) が、実際には文字列全体を変更する必要があることを実装が示しています。おそらく、名前StrToLower()
はあなたが本当に意図しているものですか?(つまり、文字列全体を変更します)。その場合は、次のコードが示しています。(本当に を書き直したい場合はtolower()
、C バージョンに似たプロトタイプを使用し、呼び出しごとに 1 つの文字のみを変更して、実際には別の質問にする必要があります)
この回答は、質問にタグ「c」があるため、.NETバージョンString.ToLower()
(文字列を変換します)が必要ないことを前提としています。これが間違った仮定である場合は、私の暴言を無視してください。
このメソッドは、char *str="STRING";
、または定数文字列 ( "STRING"
) を引数として使用します。
[拡張] OPが本当に望んでいた場合に備えて、ToLowerの実装を含めます。
#include <stdio.h>
char * StrToLower(char *str) ;
int toLower(int chr);
int main(void)
{
char lowered[] = "UPPER to Lower";
sprintf(lowered, "%s",StrToLower(lowered));
printf("%s\n", lowered); //works with a variable buffer argument
lowered[0]=0;//clear the buffer
sprintf(lowered, "%s",StrToLower("UPPER to Lower"));
printf("%s\n", lowered); //also works with a literal string argument
getchar();//view results
return 0;
}
char * StrToLower(char *str)
{
char *pNew1 = str;
char *pNew2 = str;
if(str != NULL) //NULL ?
{
if(strlen(str) != 0) //"" ?
{
while(*pNew1)
{
*pNew2 = toLower(*pNew1);
++pNew2;
++pNew1;
}
*pNew2 = '\0';
return str;// return changed string
} // and prevent returning null to caller
}
return "";//Will never get here for non-null input argurment
}
int toLower(int chr)//touches only one character per call
{
return (chr >='A' && chr<='Z') ? (chr + 32) : (chr);
}
結果:(ローランドのコメントに答える)
