0

所以我想用一个条件将小写字母变成大写字母,在小写字母之前必须有空格,但问题是我无法检查数组中的下一个字符(使用+1)是否是空格。

#include <stdio.h>
#include <ctype.h>

void convertToUpper( char *array );

int main()
{   
   char x[] = "i believe i can do it";
   convertToUpper(x);
   printf("%s",x);

   return 0;
}

void convertToUpper( char *array )
{
   while( *array != '\0' )
   {        
       if( *( array + 1 ) != ' ' && *array == ' ' )
       {
           *( ++array) = toupper( *(array) );   
       }
      ++array;
   }
}
4

3 回答 3

0

您只是转换了错误的字符,因为在您的条件下,*array是空格,您应该转换它后面的字母:

while(*array != '\0')
{        
    if( *(array + 1) != ' ' && *array == ' ')
        *(array + 1) = toupper(*(array + 1));
    ++array;
}

这个简单的检查不适用于第一个字符,如果它也应该是大写,请在循环之前添加以下内容:

if (*array != ' ')
    *array = toupper(*array)
于 2016-04-21T07:19:23.940 回答
0
void convertToUpper( char *array )
{
   while (  array[0] != 0) && (array[1] != 0) )
   {        
       if( (array[1] != ' ') && (array[0] == ' ' )
           array[1] = toupper( array[1] ); 
       ++array;
   }
}
于 2016-04-21T07:22:45.357 回答
0

这样可以记住前一个字符

char previous = ' ';
while(*array != '\0') {        
    if(previous == ' ') {
        *array = toupper(*array);
    }
    previous = *array++;
}

就在接受答案之后,但我还是发布了。

于 2016-04-21T07:25:44.517 回答