我需要打印名字的首字母,就像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