题目:
输入字符串。
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来表示 , 若对字符串的中间部分做修改删除则另建一个数组