用户从数组输入中删除空格

时间:2015-11-05 16:18:01

标签: c arrays for-loop spaces

我想从用户输入中删除任何空格,并将结果返回到屏幕上。到目前为止,以下是我的工作解决方案。我还没有发现任何错误。由于我对C和一般编程都很陌生,我的问题是:有什么我可以做得更好吗?什么优化或什么?我感谢你们的任何提示,因为你们可能比我更有经验。所以,这是我的代码:

#include <stdio.h>
#include <string.h>
#define PUFFERGROESSE 100
#define ERROR 1
#define OK 0

int main(){

    char stringPuffer[PUFFERGROESSE];
    printf("Please enter some words:"); fflush(stdout);
    if(fgets(stringPuffer, PUFFERGROESSE, stdin) == NULL){
        printf("Unable to read.\n");
        return ERROR;
    } else {
        char endString[PUFFERGROESSE];

        for (int i = 0, j = 0; i < PUFFERGROESSE; i++, j++) {
            if (stringPuffer[i] != ' ' ) {
                endString[j] = stringPuffer[i];
            } else {
                j--;
            }
        }


        printf("Without spaces your input looks like that: %s", endString);
    }
}

2 个答案:

答案 0 :(得分:3)

在您的代码中,for循环条件为i < PUFFERGROESSE。在此循环中,您可以使用循环索引访问stringPuffer

现在,stringPuffer是一个未初始化的自动局部变量,并且输入足够小,像i < PUFFERGROESSE这样的严格检查将导致访问未stringPuffer的未初始化内存,从而创建undefined behavior }。

您可以在接受用户输入后使用strlen()

另一个注意事项,int main()至少比int main(void)更好。

NITPICK:为什么定义OK,如果没有使用?

答案 1 :(得分:1)

几点建议:

  1. endString初始化为全零;这样你以后就不用担心字符串终止问题:
    char endString[PUFFERGROESSE] = {0};
    
  2. i小于PUFFERGROESSE时循环,而不是循环,直到看到字符串的结尾为止:
    for( int i = 0, j = 0; stringPuffer[i] != 0; i++ )
    
  3. 此外,只有在编写非空格字符时才增加j,而不是无条件地递增它,然后在看到空格时必须递减它:
    if ( !isspace( stringPuffer[i] ) )
      endString[j++] = stringPuffer[i];
    

基本上,该代码简化为:

char endString[PUFFERGROESSE] = {0};

for (int i = 0, j = 0; stringPuffer[i] != 0; i++) {
  if ( !isspace( stringPuffer[i] ) ) {
      endString[j++] = stringPuffer[i];
  }
}