标题:编写程序以每行一个单词的形式打印其输入-哪一种思路比较好,好在哪里?可 ...
只看楼主
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
结帖率:100%
已结贴  问题点数:18 回复次数:12 
编写程序以每行一个单词的形式打印其输入-哪一种思路比较好,好在哪里?可以改进吗?
程序代码:
/* 编写一个程序,以每行一个单词的形式打印其输入 */

/*

 * 思路:

 *    判断不是空格,制表符,换行就直接输出

 *    如果是就自己输出换行

 *      这样就可以把输入的单词以每行打印了

 */

#include <stdio.h>

int main(void)
{
        int c;

        while ( (c = getchar()) != EOF ) {
                if (c != ' ' && c != '\t' && c != '\n'){
                        putchar(c);
                }
                else if ( c == ' ' || c == '\t' || c == '\n' )
                        printf("\n");
        }
        return 0;
}





程序代码:
  GNU nano 2.2.6                                     文件: lx_1_12_1.c                                                                               


#include <stdio.h>

#define IN 1             // 在单词内
#define OUT 0            // 在单词外

main()
{
        int c, state;

        state = OUT;
        while ( ( c = getchar() ) != EOF ){
                if ( c == ' ' || c == '\n' || c == '\t' ){      // 判断c等于空格,换行,tab:在判断状态是不是在一个单词内是就输出一个换行
                        if ( state == IN ){
                                putchar('\n');
                                state = OUT;
                        }
                }
                else if ( state == OUT ) {                      // 如果不是空格之类的,判断是否在单词内。不在就输出字符,并把状态改为在单词内
                        state = IN;
                        putchar(c);
                }
                else                                            // 不是空格并不在单词外就自己输出字符
                        putchar(c);
        }
}



搜索更多相关主题的帖子: 单词 制表符 编写程序 
2016-07-24 16:44
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:14 
回复 楼主 Man丶諦
我觉得你把第一种改一下会更好
程序代码:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
        int c;

        while ( (c = getchar()) != EOF ) 
        {
                if (isalpha(c))   //你也需要考虑一下数字,标点符号什么的键入
                   putchar(c);
                else 
                   printf("\n");
        }
        return 0;
}


[此贴子已经被作者于2016-7-24 17:22编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 16:56
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
得分:0 
回复 2楼 晓益
c里面还有这样的函数啊~我都不知道~
    我这个程序对单词的定义就是,连续的一串字符,没有空格/制表符/回车。
    都没有考虑符号。

如果要考虑到符号的话,全部用if语句是不是太臃肿了,每个符号都需要去判断?
 有没有什么函数可以实现这个功能?

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 17:17
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 3楼 Man丶諦
isalpha()就可以了,如果参数是字母(包括大小写)就返回非0值,否则就返回0。

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 17:19
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 3楼 Man丶諦
    测试字符的函数
isalnum()
判断字符是否为英文或数字
isalpha()
判断字符是否为英文字母
isupper()
判断字符是否为大写英文字母
islower()
判断字符是否为小写字母
isdigit()
判断字符是否为阿拉伯数字
isxdigit()
判断字符是否为16进制数字
ispunct()
判断字符是否为标点符号或特殊符号
isascii()
判断字符是否为ASCII码字符
isspace()
判断字符是否为空格字符
isprint()
判断字符是否为可打印字符
iscntrl()
判断字符是否为ASCII码的控制字符
isgraphis()
判断字符是否为可打印字符

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 17:22
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
得分:0 
回复 5楼 晓益
对啊,这样就只会输出大小写字母了~

  

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 17:32
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
得分:0 
我重新测试了第一个程序,发现一个问题。
    如果连续输入多个空格的话,它就会输出多个换行符。
 

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 17:58
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
得分:0 
程序代码:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
        int c, test;
        test = 0;

        while( (c = getchar()) != EOF )
                if(isalpha(c)){
                        putchar(c);
                        test = 1;
                }
                else if( c == ' ' || c == '\n' || c == '\t'){
                        if (test == 1){
                                printf("\n");
                                test = 0;
                        }
                }
        return 0;
}


/*

 * 输出一个字符后把测试的值变为1

 *  直到,一个单词输出完换行后,才继续把测试的值变为0

 *  这样的话,输出一个单词后只会换行一次,就解决了输入多个空格后出现的问题

 */

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:11
Man丶諦
Rank: 1
等 级:新手上路
帖 子:50
专家分:5
注 册:2016-7-22
得分:0 
程序是改出来了,不过思路还是好混乱~

电脑小白~啥也不懂~
现在掉进了Linux的坑~
从C语言开始~我的计算机旅行~
2016-07-24 18:13
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
得分:0 
回复 9楼 Man丶諦
你改过的代码我稍微看了看,其实你的条件判断没必要那么麻烦
程序代码:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
        int c, test;
        test = 0;

        while( (c = getchar()) != EOF )
                if(isalpha(c))
                {
                        putchar(c);
                        test = 1;
                }
                else       //这里我们只关注大小写字母,其它一切可以排除
                       if (test == 1)
                       {
                              printf("\n");
                              test = 0;
                       }
                
        return 0;
}


[此贴子已经被作者于2016-7-24 18:31编辑过]


千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-24 18:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467194-1-1.html




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

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