关于c++:文本方式实现编一个函数输入一个字符串要求将所有无效字符去除空格\t\n\r

45次阅读

共计 1228 个字符,预计需要花费 4 分钟才能阅读完成。

[题目形容]
编一个函数, 输出一个字符串, 要求做一个新字符串, 把其中所有的一个或多个间断的空白字符都压缩为一个空格。这里所说的空白包含空格、’\t’、’\n’、’\r’。例如原来的字符串是:
This Content hoho
ok?
file system
uttered words
ok ok
end.
is ok
?
压缩了空白之后就是:
This Content hoho is ok ok? file system uttered words ok ok ? end.
实现该性能的函数接口要求合乎下述标准:
char shrink_space(char dest, const char *src, size_t n);

给的字符比拟凌乱,所以咱们能够将其保留在文本(shrink_file.txt)中,而后将解决好的字符放在另一个输入文本 (shrink_file_output.txt) 中。上面是具体的实现过程:
先看一下指标文本的内容

代码共分为三个局部:
1、一个函数判断以后字符是否为有效字符!

bool is_space(char c)
{if(c=='' || c=='\t'|| c=='\n'|| c=='\r')
        return true;
    else
        return false;
}

2、解决凌乱字符串的外围函数 shrink_space()!

char *shrink_space(char *dest, const char *src, size_t n){
        size_t i=0, j=0;
        while(i<n && src[i]) {if(is_space(src[i])) {dest[j++] = ' ';
                while(is_space(src[++i]))
                    ;
            }else
                dest[j++] = src[i++];
        }
    for(; i<n; ++i)
        dest[i] = '\0';
    return dest;
}

3、而后是咱们的 main 函数(此处我用的是文本按行输入输出)

int main(){fstream in("shrink_file.txt");
    ofstream out("shrink_file_output.txt");
    string line;
    char *des = new char[100];
    if(in){while(getline(in,line)){shrink_space(des,line.c_str(),sizeof(line));
            // 留神 shrink_space 的参数是 const char* 类型,应用 c_str()强制类型转换
            // 如果要将后果输入在控制台,此处用 printf
            //printf(shrink_space(des,line.c_str(),sizeof(line)));
            out << line ;
            if(line!=""){out << " ";// 管制不同行字母间距离,呈现空行不反复加空格}
            
        }
    }else{cout << "no such file" << endl;}
    delete [] des;
    in.close();
    return 0;
}

执行结束输入文本为:

达成咱们的指标,并且空格距离也是符合标准的!

正文完
 0