问题一:编写一个程序, 删除每个输入行末尾的空格及制表符,并删除完全是空格的行。
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAXLINE 1000
int getline(char line[], int len);
bool trim(char s[]);
int main(void)
{
char line[MAXLINE];
int len;
while ( (len=getline(line,MAXLINE)) > 0)
{
puts(line);
trim(line);
printf("%sEND\n",line);
}
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;
}
bool trim(char s[])
{
int len = strlen(s); //strlen返回的是s的长度,不包含结尾处的\0,并不是数组的长度,
int i = len -1;
while ( (i>=0) && (s[i]==' ' || s[i]=='\t'))
{
i--;
}
s[i+1] = '\0';
return (i==-1)?false:true;
}
问题二:编写函数reverse(s),将字符串s中的字符顺序颠倒过来。
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
void reverse(char s[]);
int main(void)
{
char s[MAXLINE];
gets(s);
reverse(s);
puts(s);
return 0;
}
void reverse(char s[])
{
int i,j;
char tmp;
for (i=0,j=strlen(s)-1; i<j; ++i,--j)
{
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}