[题目形容]
编一个函数,输出一个字符串,要求做一个新字符串,把其中所有的一个或多个间断的空白字符都压缩为一个空格。这里所说的空白包含空格、'\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;}
执行结束输入文本为:
达成咱们的指标,并且空格距离也是符合标准的!