不使用字符串库C

时间:2015-06-07 23:18:21

标签: c arrays char

这个学期开始了C,并努力将java的知识转换为C.代码编译并运行但不是我想要的。任务是编写一个逐行读取文本文件的代码(我有一个获取行函数)并输出新的文本文件保持行格式相同(意味着如果原始文件有4行输出文件必须有4行)但删除尾随字符(空格和\ t)。我花了很多时间捣乱这件事没有成功。 感谢任何帮助。

hw2_execcise_1。程序从每行输入中删除尾随空白和制表符,并删除完全空行。

Pseudo ::: while(有行读)           找到第1行的结尾(\ n)           保存长度           从线的末端开始           查找不是空格或制表符的字符           并在找到char后插入\ n。

#include <stdio.h>
#define LINELIM 1000


int getLine(char s[], int lim);

int main (void){
    int  len, i;
    char line1[100];

    while ((len = getLine(line1, LINELIM)) >0){

        for (i=len; i>=0; i--){

            if ((line1[i] == ' ') || (line1[i] == '\t')){

                line1[i] = '\n';
            }
            else break;
        }
    printf(" %s\n", line1);
    }

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

2 个答案:

答案 0 :(得分:2)

while ((len = getLine(line1, LINELIM)) >0){
    for (i=len-1; i>=0; i--){//-1 for 0 origin
        if(line1[i] == ' '  || line1[i] == '\t' || line1[i] == '\n'){//add case of '\n'
            line1[i] = '\0';//newline add print part
        }
        else break;
    }
    if(line1[0])//not blank line
        printf("%s\n", line1);
}

答案 1 :(得分:0)

代码的主要逻辑问题是

1)getline函数使用(\ n)'\ 0'或'\ 0'

终止每个输入行

2)主函数检查空格或制表符时不检查换行符。 I.E.它还需要检查换行符 - 或 - getline()不应该包含换行符