在C中保持领先的空间

时间:2016-09-29 01:06:25

标签: c string

我遇到了这个我无法克服的简单问题。

int B;
char *a = (char*)malloc(1000*sizeof(char);

scanf("%[^\n]s", a);
printf("%c\n", a[0]);
B = strlen(a);
printf("%d\n", B);

如果我输入的内容如下:

"   abc  "

a [0] ='a'且B = 5(“abc”加上最后两个空格)。我想计算前三个空格,我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用fgets()而不是使用scanf()来阅读整行,这通常会跳过空白,除非您明确捕获它。

int B;
char *a = malloc(1000 * sizeof*a); /* don't cast malloc */

if (fgets(a, 1000, stdin) == NULL) {
    fputs("Could not read input\n", stdout);
}
else {
    printf("%c\n", a[0]);
    B = strlen(a);
    printf("%d\n", B);
}

答案 1 :(得分:0)

如果您想修剪前导空格,可以试试这个:

void trim_left(char *p);
int main()
{
  int B;
  char *a = (char*)malloc(1000*sizeof(char));

  scanf("%[^\n]s", a);
  printf("%c\n", a[0]);
  trim_left(a);
  B = strlen(a);
  printf("%d\n", B);
  printf("a = %s\n", a);
  return 0;
}

void trim_left(char *p) {
  int i = 0;
  while (p[i] && isspace(p[i])) {
    i++;
  }
  memmove(p, p+i, strlen(p+i));
  p[strlen(p+i)] = '\0';
}