如何在C中使用toupper库函数?



我需要打印名字的首字母,就像tyler jae woodbury会打印TJW一样,但是我似乎无法打印大写首字母。

这是我的代码:

#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
string get_initials(string name, char initials[]);
int main(void)
{
// User input
string name = get_string("Name: ");
// Gets the users initials
char initials[10];
get_initials(name, initials);
printf("%sn", initials);
}
string get_initials(string name, char initials[])
{
int counter = 0;
for (int i = 0, n = strlen(name); i < n; i++)
{
if (name[i] == ' ')
{
initials[counter] = name[i+1];
counter++;
}
else if (i == 0)
{
initials[counter] = name[i];
counter++;
}
}
return initials;
}

我知道toupper()通常用于字符,print声明声明一个字符串,但我不知道该怎么做。

函数不正确

对于初学者来说,字符串通常可以包含单词之间的相邻空格,或者具有尾随的相邻空格。

其次,该函数不构建字符串,因为它没有将终止零字符''附加到目标数组。

并且strlen的调用是低效和冗余的。

使用标头<ctype.h>

中声明的标准函数toupper

将符号转换为大写函数声明也很混乱

string get_initials(string name, char initials[]);

使用

string get_initials(string name, string initials);

或者写

会更好
char * get_initials( const char *name, char *initials);

函数可以如下面的演示程序所示的方式定义。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char * get_initials( const char *name, char *initials )
{
const char *blank = " t";
char *p = initials;
while ( name += strspn( name, blank ), *name )
{
*p++ = toupper( ( unsigned char )*name );
name += strcspn( name, blank );
}
*p = ''; 
return initials;
}
int main( void ) 
{
char name[] = " tyler jae woodbury ";
char initials[10];
puts( get_initials( name, initials ) );
}

程序输出为

TJW

相关内容

最新更新