首页 > 解决方案 > 在 C 中测试存储的数组字符

问题描述

我刚刚开始学习 C,我正在尝试完成一个练习,我必须删除一行中的所有尾随空白字符。我的逻辑对我来说似乎很好,但是当我尝试测试一个字符是制表符还是空格时,即使它是,它也不会返回真实。

有问题的部分:

if ((s[ii] == ' ' || s[ii] == '\t') && trailing == 1)

整个事情:

#include <stdio.h>
#include <ctype.h>
#define MAXLINE 1000 /* maximum input line length */

int getline2(char line[], int maxline, char outputLine[]);

/* print above 80 character lines */
main()
{
  char cl;
  char sl[MAXLINE];
  char ol[MAXLINE];
  int i;

  while((cl = getline2(sl, MAXLINE, ol)) > 0){
    if(cl > 1){
      printf("%d: %s", cl, ol);
    }
  }

}
/* getline: read a line into s, return length */
int getline2(char s[], int lim, char ss[])
{
  int c, i, ii;
  for (i=0; i < lim-1 && (c=getchar())!=EOF && c!= '\n'; ++i){
    s[i] = c;
  }
  int trailing = 1;

  for(ii = i; ii >= 0; ii--){
    if ((s[ii] == ' ' || s[ii] == '\t') && trailing == 1){
      i--;
    } else {
      ss[ii] = s[ii];
      trailing = 0;
    }
  }
  if (c == '\n') {
    ss[i] = c;
    i++;
  }
  ss[i] = '\0';
  return i;
}

标签: c

解决方案


这个for循环应该从i - 1

  for(ii = i - 1; ii >= 0; ii--){
           ^^^^^

因为在上一个for循环中,i在字符串中添加尾随空格和制表符后递增s


推荐阅读