数组未在 C 程序中完全解析

Array not being fully parsed in C program

我正在尝试构建一个程序,该程序从输入中解析一个字符数组,然后 returns 一个格式化的省略额外的白色空格。

#include <stdio.h>
# include <ctype.h>
/* count charecters in input; 1st version */
int main(void)
{

  int ch, outp=0;
  char str[1000], nstr[1000];
  /* collect the data string */
  while ((ch = getchar()) != EOF && outp < 1000){
    str[outp] = ch;
    outp++;
  }
  for (int j = 0; j < outp-1; j++){
    printf("%c",str[j]);
  }

  printf("\n");
  for (int q = 0; q < outp-1; q++)
    {
      if (isalpha(str[q]) && isspace(str[q+1])){
        for(int i = 0; i < outp; i++){
          if (isspace(str[i]) && isspace(i+1)){
            continue;
          }
          nstr[i] = str[i];
        }
      }
    }
  printf("\n");

  printf("Formated Text: ");
  for (int i = 0; i < outp-1; i++){
     printf("%c", nstr[i]);
  }
  //putchar("\n");c
  // printf("1");

return 0;
}

这是我的代码。数组永远不会被完全解析,末尾通常被省略,出现奇怪的字符并且过去的尝试产生了一个未被完全解析的数组,为什么? 这是 "the C programming language" 中的练习 1-9。

a) 在将字符从 str 复制到 nstr 时,您需要使用额外的索引变量。做一些类似 -

for(int i = 0, j = 0; i < outp -1; i++){
      if (isspace(str[i]) && isspace(i+1)){
        continue;
      }
      nstr[j++] = str[i];
    }

b) 在打印 nstr 时,您使用的是原始字符串的长度 strnstr 的长度将小于 str 的长度,因为您删除了空格。

你现在需要求出nstr的长度或者在条件中使用i < strlen(nstr) -1