程序一:编写一个程序,以每行一个单词的形式打印其输出
解法一:设置标志,
#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]);
}