您的位置:首页 > 其它

从0开始<二>:1

2015-10-10 22:08 190 查看
程序一:编写一个程序,以每行一个单词的形式打印其输出

解法一:设置标志,

#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]);
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: