以下代码将字符串中的所有小写字符转换为大写。但是,它不是用计算大写字符替换小写字符。
static char * strtoupper(char * string, int size)
{
char c;
for(int i = 0; i< size; i++)
{
if(islower((int) (*string)) != 0)
{
c = (char) toupper(*string);
*string = c;
}
++string;
}
return string;
}
答案 0 :(得分:3)
您正在返回递增的指针,您不需要返回任何内容,只需修改字符串
即可void strtoupper(char *string)
{
while (*string != '\0')
{
*string = toupper(*string);
++string;
}
}
如果你想传递字符串的长度,例如它不是空终止
void strtoupper(char *string, size_t size)
{
size_t i;
for (i = 0 ; i < size ; ++i)
string[i] = toupper(string[i]);
}
答案 1 :(得分:1)
考虑到你的函数在第n个(即大小)元素之后返回一个指针,通常情况下它可以是终止零。
我会按照以下方式编写函数
static char * strtoupper( char *string, size_t size )
{
for( size_t i = 0; i < size; i++ )
{
if( islower( ( unsigned char )string[i] ) )
{
string[i] = toupper( ( unsigned char )string[i] );
}
}
return string;
}
此外,您可能无法将字符串文字作为参数传递给函数,因为您可能无法修改字符串文字。任何修改字符串文字的尝试都会导致程序的未定义行为。
所以例如这个函数的调用是无效的
strtoupper( "Hello", 5 );
但这是有效的
char s[] = "Hello";
strtoupper( s, strlen( s ) );
答案 2 :(得分:-3)
while (*string++ = toupper(*string));