Go CSP-S! • 6年前
前两次的出错是因为,没有考虑到找不到字符的情况。
最后解决了这种情况就通过了。
下面简单分析一下代码:变量的定义就不说了,因为这个看懂题目之后就能得出。下面说一下string.erase()函数和string.find_first_of()函数,这两个函数都是String类里面的内置函数。1.string.erase(pos,n) //删除从pos开始的n个字符 2.string.erase(pos) //删除pos处的一个字符(pos是string类型的迭代器)。3.find_first_of 函数最容易出错的地方是和find函数搞混。它最大的区别就是如果在一个字符串str1中查找另一个字符串str2,如果str1中含有str2中的任何字符,则就会查找成功,而find则不同。4.其中string:npos是个特殊值,说明查找没有匹配。
#include<iostream> 
#include<cstdio> 
#include<string> 
#include<cstring> 
using namespace std; 
int main() 
{ 
 int i,j,k,len; 
 string s,c1,c2,c3; 
 size_t p; 
  
 getline(cin,s),len=s.length(),c3=s[len]; 
 for(i=0;i<len;i++) 
  if(s[i]=='.') 
  break; 
s.erase(i+1),len=s.length(); 
  
 cin>>c1; 
 switch(c1[0]) 
   { 
     case 'D':cin>>c2; 
           p=s.find_first_of(c2); 
           if(p==string::npos) 
     cout<<"Not exist"<<endl;  
              if(p<len)s.erase(p,1); 
             break; 
     case 'I':cin>>c2>>c3; 
              p=s.find_last_of(c2); 
              if(p==string::npos) 
     cout<<"Not exist"<<endl ; 
     s.insert(p,c3); 
     break; 
  case 'R':cin>>c2>>c3; 
           p=s.find_first_of(c2); 
           if(p==string::npos) 
     cout<<"Not exist"<<endl ; 
           while(p!=string::npos) 
             { 
               s[p]=c3[0]; 
               p=s.find_first_of(c2,p+1); 
    } 
           break; 
} 
 cout<<s<<endl; 
 return 0; 
} 
 
评论:
请先登录,才能进行评论