题目:
输入字符串。
1.去除前面的空格
2.中间多个空格只保留一个
3.相邻的数字和字母之间加上'_'
分析:
输入整个字符串,因为做的操作要改变字符串中间的内容,为了避免大量移动字符串中的字符,所以另外设置一个字符串用来输出结果
去除前面的空格可以用一个标志变量来标志是否在前面。
中间空格也采用标志变量来表示中间需要去除的空格,记得每一次中间去除完要重置变量,以便之后的去除。
第三问就比较简单了。
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <algorithm>
#include <iomanip>
#define MAX 1000
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
bool isNumber(char c){
if(c>= '0' && c<= '9'){
return true;
}else{
return false;
}
}
bool isLetter(char c){
if(c>= 'a' && c<= 'z'){
return true;
}else{
return false;
}
}
//void insert(char * str,int index){
//
//}
void display(char *input,int start,int end) {
for(int i=start;i<= end;i++){
printf("%c",input[i]);
}
printf("\n");
}
int main(int argc, char** argv) {
/*freopen("file/input.txt","r",stdin);
freopen("file/output.txt","w",stdout);*/
char input[MAX];
char output[MAX];
int size=0;
gets(input);
int length=strlen(input);
bool front=true;
bool middle=true;
for(int i=0;i<length;i++){
//1.过滤前面的空格
if(front == true){
if(input[i] == ' ') {
continue;
}else{
front = false; //遇到非空格字符则结束前面的过滤
output[size++] = input[i];
}
}else{
//2.中间多个空格进行合并 只保留一个空格
if(input[i] == ' ' && middle == true) {
output[size++] = input[i] ;
middle = false;
}
if(input[i] == ' ' && middle == false) {
continue;
}
if(input[i] != ' '){
middle = true; //重置middle
}
output[size++] = input[i];
if((isNumber(input[i]) && isLetter(input[i+1])) || (isNumber(input[i+1]) && isLetter(input[i])) ) {
output[size++] = '_';
}
}
//output[size++] = input[i];
}
// for(int i=0;i<size-1;i++){
// //3.数字和字母之间添加_
// if((isNumber(output[i]) && isLetter(output[i+1])) || (isNumber(output[i+1]) && isLetter(output[i])) ) {
// insert(output,i); //在i位置插入_
// }
// }
display(output,0,size-1);
return 0;
}
//对字符串前后进行处理则可以用前后cur来表示 , 若对字符串的中间部分做修改删除则另建一个数组