pta单词首字母大写错了要怎么改?

pta上的题目

img

写的程序是


#include<stdio.h> 
int main(void){
    int flag=0,count=0;
    char ch;
    ch=getchar();
    while(ch!='\n'){
        if(ch==' '){
            flag=1;
        }else if(ch<='z'&&ch>='a'&&(flag==1||count==0)){
            ch=ch-32;
            flag=0;
            count++;
        }
        printf("%c",ch);
        if(ch!=' '){
            count++;
        }
        ch=getchar();
    }
    
    
    return 0;
}

img


测试点一一直过不了,但是找了很久也看不出来问题。
希望有大神能帮忙看看。
十分感谢!

    if(ch==' '){

改成

    if(!(ch<='z'&&ch>='a' || ch<='Z'&&ch>='A')){

因为单词间可能是用标点分隔,不是空格分隔

你题目的解答代码如下:

#include<stdio.h>
int main(void){
    int flag=0,count=0;
    char ch;
    ch=getchar();
    while(ch!='\n'){
        if(!(ch<='z'&&ch>='a' || ch<='Z'&&ch>='A')){
            flag=1;
        }else if(ch<='z'&&ch>='a'&&(flag==1||count==0)){
            ch=ch-32;
            flag=0;
        }
        count++;
        printf("%c",ch);
        ch=getchar();
    }

    return 0;
}

如有帮助,望采纳!谢谢!

elseif改为if,flag=0放在循环语句的第一条语句,后面的可以删除。

# include<stdio.h>
int main()
{
    int isSpace = 1;
    char ch; 
    ch=getchar();
    while(ch!='\n')
    {
        if(isSpace && ch>=97 && ch<=122)
            putchar(ch-32);
        else
        {
            if(ch == 32)
                  isSpace = 1;
            else
                  isSpace = 0;
            putchar(ch);
        }
        ch=getchar();
    }
    return 0;
}
    
 

我用结构体写了一个,希望对你有帮助。
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>

typedef struct Link
{
char c;
struct Link * next;
}link;

link * initLink()
{
link *head=NULL,*p=NULL,*temp=NULL;
char c;
head=(link *)malloc(sizeof(link));
head->c=' ';
head->next=NULL;
p=head;
printf("请输入一段英文,并以回车结束。\n");
c=getche();
while(c!='\r')
{
temp=(link *)malloc(sizeof(link));
temp->c=c;
temp->next=NULL;
p->next=temp;
p=temp;
c=getche();
}
return head;
}

void showLink(link *head)
{
link *p=head->next;
while(p)
{
printf("%c",p->c);
p=p->next;
}
printf("\n");
}

link * change(link *head)
{
link *p1=head,*p2=head->next,*p=head;
while(p2)
{
if((p2->c!=' ')&&(p1->c==' '))
p2->c=(p2->c-32);
p1=p2;
p2=p2->next;
}
return p;
}

void main()
{
link *head=initLink();
head=change(head);
showLink(head);
}