[题目形容]
编一个函数,输出一个字符串,要求做一个新字符串,把其中所有的一个或多个间断的空白字符都压缩为一个空格。这里所说的空白包含空格、'\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;}

执行结束输入文本为:

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