Хотя название вашей функции ToLower()
предлагает вам переписывание версии ANSI C из tolower()
, (т. е. изменение одного символа от верхнего к нижнему регистру), ваша реализация предполагает, что вы действительно хотите, чтобы вся строка была изменена. Возможно, имя StrToLower()
- это то, что вы действительно намереваетесь? (т. е. изменить всю строку). Если это так, иллюстрируется следующий код. (Если вы действительно хотите, чтобы повторно написать tolower()
, это должно быть действительно другой вопрос, с прототипом аналогичной версии C, и меняется только один символ за звонок)
Этот ответ предполагает из тега «с «в вашем вопросе, что вам не нужна версия .NET String.ToLower()
(которая преобразует строку). Если это неправильное предположение, пренебрегайте моими тиражами.
Этот метод будет работать с char *str="STRING";
или с постоянной строкой ("STRING"
) в качестве аргумента.
[расширенный] Включите реализацию ToLower, в случае, если это действительно нужно OP.
#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);
}
Результаты: (ответ на комментарий Роланда)
Как вы называете это? Если вызывается с постоянной строкой - 'ToLower (" foo ")' - это должно завершиться неудачно. –
Вы называете его нулевой завершаемой строкой? –
Не ответ на ваш вопрос, но зачем использовать '65' и' 90', когда '' A'' и '' Z'' доступны и смысл понятнее? –