问题及代码:
/*将输入字符串s中的字符颠倒过来*/
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[],int maxline);
void reverse(char s[]);
main()
{
char line[MAXLINE]; //当前输入行
int len;
while((len=getline(line,MAXLINE))>0)
{
reverse(line);
printf("%s",line);
}
}
/*颠倒输入字符串的字符*/
void reverse(char s[])
{
int i,j; // j为第一个字符下标,i为最后一个字符下标
char c;
i=0;
while(s[i]!='\0')
i++; //输入一个字符数组,直到遇到'\0'为止
i--; //去掉最后一个'\0'符号
if(s[i]=='\n')
i--; //此时的i已经是达到最大
j=0;
/*每置换一次,即第一个与倒数第一个互换,
之后,倒数第二与第二互换,直到j>=i停止 */
while(j<i)
{
c=s[j];
s[j]=s[i];
s[i]=c;
i--;
j++;
}
}
/*输入一行,并返回其长度*/
int getline(char s[],int lim)
{
int c,i,j;
j=0; //j记录复制到字符串s中字符的个数
for(i=0;(c=getchar())!=EOF&&c!='\n';i++) //不再检查字符数是否超出数组s的限制
if(i<lim-2) //数组s的最后一个下标是lim-1;
{
s[j]=c;
j++;
}
if(c=='\n')
{
s[j]=c;
j++;
i++;
}
s[j]='\0'; //字符串末尾以'\0'为结尾不能漏了
return i;
}
运行结果:
学习心得:
颠倒字符串,注意先去掉'\0'和'\n'.
知识总结:
要颠倒字符串,可以通过循环判断第一个j与最后一个下标i的大小,之后再不断减少、增加对比