以下是我先写的内容。它非常适合字符串之间的一个空格。
int main(void)
{
string name = GetString();
printf("%c",toupper(name[0]));
for (int i = 0; i < strlen(name); i++)
{
if (name[i] == ' ')
{
i++;
printf("%c", toupper(name[i]));
}
}
printf("\n");
}
但是,由于它只检测到一个空格,因此对于两个字符串之间有多个空格的用户输入不起作用。所以,我继续创建了一个do while循环,如下所示:
int main(void)
{
string name = GetString();
printf("%c",toupper(name[0]));
for (int i = 0; i < strlen(name); i++)
{
do
{
if (name[i] == ' ')
{
i++;
printf("%c", toupper(name[i]));
}
}
while (name[i+1] != ' ');
}
printf("\n");
}
虽然我期待循环为我做,现在,我的终端只提示几乎无限数量的用户输入名称和打印绝对没有。我似乎无法检测到错误。这只是我的第一周编程,请帮忙!
答案 0 :(得分:1)
您可以使用检查next是否为空格来转义下一个空格:
if (name[i] == ' ' && name[i+1] != ' ')
在你的第一个节目中。
for (int i = 0; i < strlen(name); i++)
{
if (name[i] == ' ' && name[i+1] != ' ')
{
printf("%c", toupper(name[i+1]));
}
}
答案 1 :(得分:0)
程序的主要逻辑可以看作以下方式。我以字符数组为例,因为我不知道如何定义名称TypeError
string
程序输出
#include <stdio.h>
#include <ctype.h>
int main( void )
{
// string name = GetString();
char name[] = "yashmin sainju";
char *p = name;
while ( isblank( ( unsigned char )*p ) ) ++p;
if ( *p ) printf( "%c.", toupper( ( unsigned char )*p ) );
while ( *p && !isblank( ( unsigned char )*p ) ) ++p;
while ( isblank( ( unsigned char )*p ) ) ++p;
if ( *p ) printf( " %c.\n", toupper( ( unsigned char )*p ) );
}
如果编译器不支持函数Y. S.
,则可以将其替换为表达式
isblank