从0开始<二>:1

程序一:编写一个程序,以每行一个单词的形式打印其输出

解法一:设置标志,

#include <stdio.h>

int main(void)
{
	int c,flag;
	flag = 0;
	while ( (c=getchar()) != EOF)
	{
		if (c==' ' || c=='\t' || c=='\n')
		{
			if (flag == 0)
			{
				flag = 1;
				putchar('\n');
			}
		}
		else 
		{
			flag = 0;
			putchar(c);
		}
	}
	
	return 0;
}

程序二:该程序读入一组文本,并把最长的文本行打印出来。

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* 打印输出最长行 */
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)
        printf("%s",longest);

    return 0;
}

/*将一行读入到s中并返回其长度*/
int getline(char s[], int lim)
{
    int c,i;

    for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
        s[i] = c;
    //保存'\n'的
    if (c == '\n')
    {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;
}

void copy(char to[], char from[])
{
    int i;
    i = 0;

    while ( (to[i] = from[i]) != '\0') //将'\0'也给拷贝了
        ++i;
}
程序三:编写一个程序,打印长度大于80个字符的所有输入行

解法:仔细看看别人的思路

#include <stdio.h>
#define MINLENGTH 81

int readbuf(char *buf);  //读取字符到buf中,并记录状态 
int copyline(char *buf);   //打印输出 

int main(void)
{
	char buffer[MINLENGTH];
    int status = 0;
    while (status != -1) 
	{
        status = readbuf(buffer);
        if (status == 1)
            status = copyline(buffer);
    }
    return 0;
}

int readbuf(char *buf)  
{
	int i,c;
	i = 0;
	while (i < MINLENGTH)
	{
		c = getchar();
		if (c == EOF) return -1;
		if (c == '\n') return 0;
		buf[i++] = c;
	}	
	return 1;
}

int copyline(char *buf) 
{
	int i;
    int c;
    int status = 1;
    for(i=0; i<MINLENGTH; i++)
        putchar(buf[i]);
    while(status == 1)
	{
        c = getchar();
        if (c == EOF)
            status = -1;
        else if (c == '\n')
            status = 0;
        else
            putchar(c);
    }  
    putchar('\n');
    return status;
}

程序四:编写函数reverse(s),将字符串s中的字符顺序颠倒过来,使用该函数编写一个程序,每次颠倒一个输入行中的字符

#include <stdio.h>
#include <string.h>
#define MAXLINE 1024

int getline(char *buf, int lim);   // lim是一行限制最大长度 
void reverse(char *buf);
void swap(char *a, char *b);

int main(void)
{
	char buf[MAXLINE];
	int len;
	
	while ( (len=getline(buf,MAXLINE)) > 0)
	{
		buf[len-1] = '\0';
		reverse(buf);
		printf("%s\n",buf);	
	}
	 
	return 0;
}

int getline(char s[], int lim)
{
    int c,i;

    for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
        s[i] = c;
    //保存'\n'的
    if (c == '\n')
    {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';

    return i;
}

void swap(char *a, char *b)
{
	char tmp = *a;
	*a = *b;
	*b = tmp;
}

void reverse(char *buf)
{
	int i,j;
	j = strlen(buf) - 1;
	for (i=0; i<j; ++i,--j)
		swap(&buf[i],&buf[j]);
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值