| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 547 人关注过本帖
标题:OJ 上一道题,看了一小时没发现哪里错了
只看楼主 加入收藏
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:4 
OJ 上一道题,看了一小时没发现哪里错了
Description:
输入一个英文句子,句子中仅包含英文字母,标点符号和空格,其中空格和标点符号将句子划分成一个个独立的单词,除去句子中的标点符号和空格,将句子中的每个单词的首字母大写,然后输出句子,输出时各个单词之间以一个空格隔开,句子以“.”结束。
Input:
输入只有一行,包含一个长度都不超过100的字符串S,表示英文句子。
Output:
输出只有一行,即按要求输出处理后的英文句子,若句子中不含任何单词,则输出一个“.”。
Sample Input1    Sample Ouput1
Who love?,   SoLo..    Who Love SoLo.

Sample Input2    Sample Ouput2
Who,love???SoLo    Who Love SoLo.

Sample Input3    Sample Ouput3
----Who,love???SoLo    Who Love SoLo.



我这样写,就是Wrong Answer

#include<stdio.h>
#include<string.h>


char str[1000];

int main(void)
{
    int N,i,a,b=0;
    scanf("%d",&N);
    getchar();
    while(1)
    {
        if(N == 0)break;
        for(i=0;i<N;i++)
        {
            //printf("%d\n",i);
            gets(str);
            for(a=0;a<strlen(str);a++)
            {
                if(!(('a'<=str[a]&&'z'>=str[a])||('A'<=str[a]&&'Z'>=str[a])))str[a]=' ';
            }
            for(a=1;a<strlen(str);a++)
            {
                if(str[a]!=' '&&str[a-1]==' '&&(!('A'<=str[a]&&'Z'>=str[a])))
                {
                    str[a]-=32;
                }
            }
            if('a'<=str[a]&&'z'>=str[a])
            str[0] -= 32;
            for(a=0;a<strlen(str);a++)
            {
               
                if(('a'<=str[a]&&'z'>=str[a])||('A'<=str[a]&&'Z'>=str[a]))b++;
            }
            if(b!=0)
            {
                for(a=0;a<strlen(str);a++)
                {
                if(str[a]!=' ')printf("%c",str[a]);
                if(str[a+1]==' '&&str[a+2]!=' ')printf(" ");
                }
            }
            
                printf(".");
        
            
            
            printf("\n\n");
            b=0;
        }   
    //    printf("%d\n",i);
            b=0;
        scanf("%d",&N);
        getchar();
    }   
    return 0;
}
搜索更多相关主题的帖子: 英文字母 英文句子 标点符号 字符串 单词 
2014-11-15 20:40
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:10 
希望楼主加强下程序的可读性,我只把错的地方改了下,楼主试试。
程序代码:
#include<stdio.h>
#include<string.h>


char str[1000];

int main(void)
{
    int N,i,a,b=0;
    scanf("%d",&N);
    getchar();
    while(1)
    {
        if(N == 0)break;          
        for(i=0;i<N;i++)           
        {
            //printf("%d\n",i);
            gets(str);
            for(a=0;a<strlen(str);a++)
            {
                if(!(('a'<=str[a]&&'z'>=str[a])||('A'<=str[a]&&'Z'>=str[a])))str[a]=' ';
                
            }
            for(a=1;a<strlen(str);a++)      
            {
                if(str[a]!=' '&&str[a-1]==' '&&(!('A'<=str[a]&&'Z'>=str[a])))
                {
                    str[a]-=32;
                }
            }
            if('a'<=str[0]&&'z'>=str[0])       /*原本这里的str[a]改为str[0]*/
            str[0] -= 32; 
            for(a=0;a<strlen(str);a++)
            {
                
                if(('a'<=str[a]&&'z'>=str[a])||('A'<=str[a]&&'Z'>=str[a]))b++;
            }
            if(b!=0)
            {
                for(a=0;a<strlen(str);a++)
                {
                if(str[a]!=' ')printf("%c",str[a]);
                if(str[a+1]==' '&&str[a]!=' ')printf(" "); /*a+2改成a 不然多个非字母字符在一起时会出现连续空格*/
                }
            }
            
                printf(".");
        
            
            
            printf("\n\n");
            b=0;
        }    
    //    printf("%d\n",i);
            b=0;
        scanf("%d",&N);
        getchar();
    }    
    return 0;
}
收到的鲜花
  • chen5656de2014-11-15 22:32 送鲜花  3朵  
2014-11-15 22:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <ctype.h>

int main()
{
    char s[128], *p;
    for(p = gets(s); *p && !isalpha(*p); p++);
    for(putchar(toupper(*(p++))); *p; p++)
        if(isalpha(*p))
            if(!isalpha(*(p - 1)))
                printf(" %c", toupper(*p));
            else
                putchar(*p);
    putchar('.');
    return 0;
}
收到的鲜花
  • 书生等待2014-11-17 16:37 送鲜花  10朵   附言:好文章

重剑无锋,大巧不工
2014-11-15 22:41
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:0 
回复 3 楼 beyondyf
字字珠玑,句句经典!
回味无穷!
膜拜
2014-11-17 12:25
fogmaple
Rank: 4
来 自:江西省赣州市于都县
等 级:业余侠客
威 望:1
帖 子:119
专家分:233
注 册:2014-7-28
收藏
得分:0 
以下是引用beyondyf在2014-11-15 22:41:24的发言:

#include <stdio.h>
#include <ctype.h>

int main()
{
    char s[128], *p;
    for(p = gets(s); *p && !isalpha(*p); p++);
    for(putchar(toupper(*(p++))); *p; p++)
        if(isalpha(*p))
            if(!isalpha(*(p - 1)))
                printf(" %c", toupper(*p));
            else
                putchar(*p);
    putchar('.');
    return 0;
}

一语惊人
2014-11-17 14:38
快速回复:OJ 上一道题,看了一小时没发现哪里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028246 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved