#include<stdio.h> #include<string.h> #include <pthread.h> #include <iostream> #include <algorithm> #include <vector> #include <stack> #include <stdlib.h> #include <sstream> #include <ctype.h> using namespace std; int main() { string s("!22erer3@@"); /* //用时0.111s for(decltype(s.size())index=0; index!=s.size();) { if(ispunct(s[index])) { for(decltype(s.size())j=index; j<s.size(); j++) s[j]=s[j+1]; s.erase(s.end()-1); } else index++; }*/ string result; //0.078s bool haspunct=false; for(decltype(s.size())index=0;index!=s.size();index++){ if(ispunct(s[index])){ haspunct=true; } else{ result+=s[index]; } } cout<<haspunct<<" "<<result<<endl; return 0; }
第一种方法,对于每个符号,将后面的所有字符向前移动一个位置;第二种方法,新建一个string,保存不为符号的字符。