题目描述:
删除字符串首尾空格,中间的连续空格只留一个,原来字符串的顺序不变。
输入描述:
“***** as**** adap******”(*表示空格)
输出描述:
“as*adadp”
思路:
- 传入字符串(cin 遇空格或换行,会停止识别)
- 由于要判断空格是否留一个,所以需要一个变量进行记录
代码如下:
#include <iostream>
using namespace std;
void Deblank(char * str) {
int flag = 0; //代表没开始处理空格
int p = 0;
int i = 0;
while (str[i]) {
//遇到空格 还没开始处理
if (!flag && str[i] == ' ') {
i++;
}
//遇到不是空格 还没开始处理
else if (!flag && str[i] != ' ') {
flag = 1;
str[p++] = str[i++];
}
//遇到空格 开始处理了
else if (flag && str[i] == ' ') {
flag = 0;
str[p++] = str[i++];
}
//遇到不是空格 开始处理了
else //if(flag && str[i] != ' ')
{
flag = 1;
str[p++] = str[i++];
}
}
if (str[p - 1] == ' ') {
str[p - 1] = '\0';
}
else
str[p] = '\0';
}
int main() {
char array[] = " asadad q ";
Deblank(array);
cout << array << endl;
return 0;
}
代码生成图: