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

1. 自己写的, 用的for循环逆序输出。s[i] 已经存储了字符串 不用在输入 且注意输出格式问题。
  void reverse(char s[])
{
 int j, i;
   //for (i = 0; (c = getchar()) !=EOF && i < MAXLINE - 1; ++i)
     // s[i] = c;   // 
    i = strlen(s);
 for (j = i; j >= 0; --j)
  //printf("%s", s);    输出的整个字符串
    printf("%c",s[j]);
}
2. 答案书上的。
void reverse(char s[])
{
     int i, j;
  char temp;
  i = 0; // 记得初始化
  while(s[i] != '\0')
   ++i;           //    得到s[i]的长度包括'\0' 所以 i 要减1
 
     
  --i;               //  这里为何 --i? 
  if(s[i] == '\n')
   --i;           //  如果字符串第二个字符为'\n', --i
     
     j = 0;
  while(j < i)
  {
         temp = s[i];
   s[i] = s[j];
   s[j] = temp;
   --i;
   ++j;
  }
}
3. csdn上朋友写的,直接用strlen()求出len。 也可以用指针表示。
void reverse(char s[])
{
 int i, len, j;
 char temp;
 len = strlen(s);
    
 for(i = len - 1, j = 0; j < i; --i,++j)  //这里 i为何从len - 1开始呢
 {
        temp = s[i];
       s[i] = s[j];
      s[j] = temp;
  }
}
 后来看到英文  //用于消除行末的换行符,没有该函数的话,输出分为两行,第一行为一个换行符
版答案上还写了个discardnewline()函数
 
void discardnewline(char s[])
{
 int i;
 for(i = 0; s[i] != '\0'; i++)
 {
  if(s[i] == '\n')
        s[i] = '\0';
  }
}


你可能感兴趣的:(TCPL学习笔记)