【LeeCode做题日记(C/C++)--简单】929题:独特的电子邮件地址

本文通过929题的独特电子邮件地址为例,探讨了C/C++中字符串处理的重要函数,包括substr用于截取子串,replace用于替换子串,以及find系列函数用于查找子串的不同方法。这些函数在解决实际问题中起到关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】

示例:

输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。

 

【题目关注点】

string的截取、替换、查找子串函数总结:

1. 截取子串

       s.substr(pos, n)    截取s中从pos开始(包括0)的n个字符的子串,并返回

       s.substr(pos)        截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回

2. 替换子串

       s.replace(pos, n, s1)    用s1替换s中从pos(包括pos)开始(包括0)的n个字符的子串

3. 查找子串

       s.find(s1)         查找s中第一次出现s1的位置,并返回(包括0)

       s.rfind(s1)        查找s中最后次出现s1的位置,并返回(包括0)

       s.find_first_of(s1)       查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)

       s.find_last_of(s1)       查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)

       s.fin_first_not_of(s1)         查找s中第一个不属于s1中的字符的位置,并返回(包括0)

       s.fin_last_not_of(s1)         查找s中最后一个不属于s1中的字符的位置,并返回(包括0)

 

【解答】

class Solution {
public:
    int numUniqueEmails(vector<string>& emails) {
        for(int i=0;i<emails.size();++i){
            for(int j=0;j<emails[i].size();++j){
                if(emails[i][j]=='+'){
                    //如果是“+”,之后的都不用再循环判断了,反正也是要删掉的
                    break;
                }
                if(emails[i][j]=='.'){
                    emails[i].replace(j,1,"");
                }
            }
            int add_index = emails[i].find("+");
            int a_index = emails[i].find("@");
            if(add_index>0){
                //注意这里不能写add_index!=0,因为当没有“+”时,find()函数返回-1
                //此时会报out_of_range的错
                emails[i].replace(add_index,a_index-add_index,"");
            }
        }
        int flag = 0;
        int number = 1;
        for(int i=0;i<emails.size()-1;++i){
            flag = 0;
            for(int j=i+1;j<emails.size();++j){
                if(emails[i]==emails[j]){
                    flag = 1;
                    break;
                }
            }
            if(flag==0)
                ++number;
        }    
        return number;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值