【问题标题】:Remove blanks from end of line从行尾删除空白
【发布时间】:2011-08-13 21:55:55
【问题描述】:

我正在尝试在开头和结尾处没有空格的打印行。 我不明白为什么从末尾删除不起作用。

#include <stdio.h>

#define MAX_LINE_LENGTH 1000

#define LINE_BEGIN 0
#define LINE_MIDDLE 1
#define INBLANK 2


void deleteBlankFromEnd(char line[], int offset);
void deleteLine(char line[], int offset);

main()
{
    int c, i, status ;
    i = status = 0;
    char line[MAX_LINE_LENGTH];
    while((c = getchar()) != EOF) { 
        if (c == ' ' || c == '\t') {
            if (status == LINE_MIDDLE || status == INBLANK) {
                line[i++] = c;
                if (status == LINE_MIDDLE)
                    status = INBLANK;
            }
        } else if (c == '\n') {
            if (status > 0) {
                if (status == INBLANK) {
                    printf("Line length = %d ", i);
                    deleteBlankFromEnd(line, i); 
                }
                printf("%s", line);
                printf("End\n");

                deleteLine(line, i);
            }
            i = 0;
            status = LINE_BEGIN;
        } else {
            line[i++] = c;
            status = LINE_MIDDLE;
        }
    }
}

void deleteBlankFromEnd(char line[], int offset) {
    while (line[offset] == ' ' || line[offset] == '\t') {
        line[offset--] = 0;
    }
    printf("Line length = %d ", offset);
}

void deleteLine(char line[], int offset) {
    while (offset >= 0) {
        line[offset--] = 0;
    }
}

【问题讨论】:

    标签: c string console-application


    【解决方案1】:

    对我来说,这似乎是一个不合时宜的索引错误。如果初始偏移处的字符不是空格或制表符,您的 deleteBlankFromEnd 将不执行任何操作;试着找出它是什么?您可能需要从 --i

    【讨论】:

      【解决方案2】:

      您传递给deleteBlankFromEnd 函数的偏移量错误,在您的情况下等于输入长度。通过这种方式,您尝试访问实际上超出范围的内容:

      while (line[offset] == ' ' || line[offset] == '\t')
      

      你最好像下面这样调用 deleteBlankFromEnd:

      deleteBlankFromEnd(line, i-1);
      

      第二个参数将指向字符串中的最后一个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2022-01-03
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多