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