• 数据结构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 }
  • 相关阅读:
    Git中从远程的分支获取最新的版本到本地方式
    vector map迭代器失效解决方案
    git 远程库 创建私钥
    centos type.h 编译错误问题
    关于/usr/bin/ld: cannot find -lcrypto 的错误
    线程存储(Thread Specific Data)
    bgcolor RGB 和16进制之间的转换,16进制转RGB,源码
    html 网页代码大全,总结,使用
    使用iframe的好处与坏处详细比拼
    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11358752.html
Copyright © 2020-2023  润新知