其实就是删除多余的空格,其实两种方法,一种是在第一个遇到的单词前面加空格,这样的话需要考虑串首的情况。可以用flag来标记是不是句子的第一个单词。另一种方法是在单词结束的字符后面加空格,但需要考虑字符串以空格结尾的情况,遍历完字符串之后,直接判断最后一个元素是不是空格就可以了。第二种方法更直观一点。
如果不仅仅是空格,还有回车。参考扩展问题及其再思考。
#include<stdio.h> #include<string.h> void RemoveSpace(char *str, int nLen) { int i,k; int flag = 0; for(i = 0, k = 0; i < nLen; ++i) { //不是空格直接拷贝 if(str[i] != ' ') { str[k++] = str[i]; flag = 1; } //当前是空格,并且前一个不是空格,则加一个空格 else if(flag == 1) { str[k++] = ' '; flag = 0; } } //如果以空格结尾,那最后一个一定是一个空格 if(str[k - 1] == ' ') str[k - 1] = '\0'; else str[k] = '\0'; } int main() { char str[100]; int nLen; while(gets(str)) { nLen = strlen(str); RemoveSpace(str, nLen); puts(str); } }