数据结构3:字符串

string的基本操作函数要会,拷贝,查找

HW笔试第一题,两个字符串,前面是全量字符集,后面是已占用字符集(用@隔开),输出剩余的字符集。

 1 #include<iostream>
 2 #include<map>
 3 using namespace std;
 4 string stringoperate(string str1,string str2)
 5 {
 6     int len1=str1.size();
 7     int len2=str2.size();
 8     if(len2==0)
 9         return str1;
10     map<char,int> mp;
11     //存入map
12     for(int i=0;i<len1;i=i+4)
13     {
14         mp[str1[i]]=str1[i+2]-'0';//字符串转数字
15     }
16     for(int i=0;i<len2;i=i+4)
17     {
18         mp[str2[i]]-=str2[i+2]-'0';
19     }
20     //修改string
21     for(int i=0;i<len1;i=i+4)
22     {
23         str1[i+2]=mp[str1[i]]+'0';
24     }
25     return str1;
26 }
27 void stringdivid()
28 {
29     string str;
30     //string str="a:3,b:5,c:2@a:1,b:2";
31     cin>>str;
32     int sig=str.find('@');//寻找@的下标
33     //分割字符串成两个
34     string str1(str,0,sig);
35     string str2(str,sig+1);
36     string result;
37     result=stringoperate(str1,str2);
38     
39     cout<<result;
40 }
41 int main()
42 {
43     stringdivid();
44     return 0;
45 }

 这是我在牛客上找的一个练习题:

题目:

1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC
 
解法:
快慢指针,i代表快指针,j代表慢指针,如果满足条件1或2,慢指针就不动,快指针一直走到尾就结束。
 1 #include<iostream>
 2 using namespace std;
 3 
 4 void StrOperation()
 5 {
 6     string str;
 7     int n;
 8     cin>>n;
 9     while(n--)
10     {
11         cin>>str;
12         int j=0;
13         for(int i=0;i<str.size();i++)
14         {
15             str[j++]=str[i];
16             if(j>=3&&str[j-2]==str[j-1]&&str[j-2]==str[j-3])
17             {
18                 j--;//这一句代表前面15行的赋值是无效的,因为下一个for循环还会给同样的j赋值,而赋的值是下一个元素
19             }
20             if(j>=4&&str[j-4]==str[j-3]&&str[j-2]==str[j-1])
21             {
22                 j--;
23             }
24         }
25         str.erase(str.begin()+j,str.end());//删除j位置后的所有元素
26         cout<<str<<endl;;
27     }
28 }
29 int main()
30 {
31     StrOperation();
32     return 0;
33 }

 

posted @ 2019-08-15 16:25  妮妮熊  阅读(342)  评论(0编辑  收藏  举报