7-13
本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出已输入的字符,其中所有单词的首字母已改为大写。
输入样例:How are you?结尾无空行输出样例:How Are You?结尾无空行
#include <stdio.h>
#include<string.h>
int main()
{
char s[100];
int i,len,k;
gets(s);
if(s[0]>='a'&&s[0]<='z')
s[0]=s[0]+'A'-'a';
len=strlen(s);
for(i=0;i<len;i++)
if(s[i]==' '&&s[i+1]>='a'&&s[i+1]<='z')
s[i+1]=s[i+1]+'A'-'a';
k=len;
for(i=0;i<k;i++)
printf("%c",s[i]);
}
在测试点1多个空格,长、短字符串与测试点2空格结尾 均显示运行时错误
需要判断前一个字符为空格,当前字符为字母时,将当前字符转成大写字母。
代码修改如下:
#include <stdio.h>
#include<string.h>
int main()
{
char s[100];
int i,len,k;
gets(s);
if(s[0]>='a'&&s[0]<='z')
s[0]=s[0]+'A'-'a';
len=strlen(s);
for(i=1;i<len;i++) //这里从1开始
if(s[i-1]==' '&&s[i]>='a'&&s[i]<='z') //这里是处理i
s[i]=s[i]+'A'-'a';
k=len;
for(i=0;i<k;i++)
printf("%c",s[i]);
}
#include <stdio.h>
int main()
{
int c = 0;
char ch;
do
{
c = 0;
do
{
ch = getchar();
if (ch >= 'a' && ch <= 'z' && c == 0)
{
ch = ch + 'A' - 'a';
}
c++;
putchar(ch);
} while (ch != ' ' && ch != '\n');
} while (ch != '\n');
return 0;
}