简单的C程序<三>:单词计数、从输入行读取数据、最长行打印

问题一:对输入的单词计数
解法一:

#include <stdio.h>
#define IN 1
#define OUT 0

int main(void)
{
    int c,cnt,flag;
    cnt = 0;
    flag = OUT;   //在单词外

    while ( (c=getchar()) != EOF)
    {
        if (c==' ' || c=='\t' || c=='\n')    
            flag = OUT;
        else if (flag==OUT)
        {
            flag = IN;
            ++cnt;
        }
    }

    printf("%d\n",cnt);
    return 0;
}

总结:设置标志位,得明白标志位是什么意思,以及标志位什么时候需要改变,注意标志位的改变一定是成双的。

问题二:编写函数getline(char line[],int len)从输入读取一行数据(不包含\n)到 line中,且返回字符串的长度(限定字符串长度最长是len )

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int len); 

int main(void)
{
    char line[MAXLINE];
    int len = getline(line,MAXLINE);
    printf("%s %d",line,len);
    return 0;
}

int getline(char line[], int len)
{
    int c,cnt;
    cnt = 0;
    while ( (c=getchar())!=EOF && c!='\n' && cnt<len)    
    {
        line[cnt++] = c;
    }
    line[cnt] = '\0';  
    return cnt;
}

问题三:从输入读入一组文本行,并将最长的文本行打印出来

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int len);
void copy(char src[], char des[]);

int main(void) 
{
    int len;                    /*当前行长度*/
    int max;                    /*目前为止最长行的长度*/
    char line[MAXLINE];         /*当前的输入行*/ 
    char longest[MAXLINE];      /*用于保存最长的行*/ 
    max = 0;

    while ( (len=getline(line,MAXLINE)) > 0)
    {
        if (len > max)
        {
            max = len;
            copy(longest,line);
        }
    }
    if (max > 0)
        puts(longest);
    return 0;
}

int getline(char line[], int len)
{
    int c,cnt;
    cnt = 0;
    while ( (c=getchar())!=EOF && c!='\n' && cnt<len) 
    {
        line[cnt++] = c;
    }
    line[cnt] = '\0';  
    return cnt;
}

void copy(char des[], char src[])
{
    int i = 0;

//  while ( (des[i++]=src[i++]) != '\0');  一个错误写法  i已经加了两次了
    while ( (des[i]=src[i]) != '\0')
        ++i;

}

总结:(1)其实写程序先把框架写出来就好,以上的程序框架如下:

while (还有未处理的行)
if (该行比已处理的最长行还要长)
    保存该行
    保存该行的长度
打印最长的行

(2)还有以上注释的错误,以后需要注意注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值