m0_59173762
m0_59173762
采纳率100%
2021-06-11 00:29 阅读 84

取出出现过不止一次的字符

10

如何输出一个string中出现过不止一次的单词?例如输入“one one two”需要得到one?

  • 点赞
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • mistye 头上长西瓜 2021-06-11 01:54

    空格分割,轮询对比

    点赞 评论 复制链接分享
  • soar3033 soar3033 2021-06-11 07:47
    zf=[]   #存储字符
    cs=[]   #存储字符次数
    
    ss="one one two"   #原始字符串
    for i in ss:    #遍历各个字符
        flag=0      #字符存在标记
        for j in range(len(zf)):    #便利字符存储里的已有字符
            if zf[j]==i:    #如果字符以前出现过
                cs[j]+=1    #字符次数+1
                flag=1      #更改标记 表示字符已存在
        if not flag:        #如果字符之前不在已有字符里
            zf.append(i)    #向已有字符添加该字符
            cs.append(1)    #将添加的字符的次数记为1
    
    for i in range(len(zf)):    #便利已有字符
        if cs[i]>1:             #如果该字符次数大于1
            print(zf[i])        #输入该字符
            
    

    点赞 评论 复制链接分享
  • weixin_41891396 登楼流樱 2021-06-11 09:47
    #include <iostream>
    #include <string>
    #include <vector>
    #include<sstream>
    
    using namespace std;
    
    int main()
    {
    	string temp = "one one two three four two one one one three";
    	vector<string> strSub;	//用于存放分割后的字符串 
    	vector<string> res;		//存放重复的字符串
    
    	string result;
    	stringstream input(temp);
    	while (input >> result)		//分割字符串
    		strSub.push_back(result);
    	string strRepetition = "";	//重复的字符串的下标
    	for (int i = 0; i < strSub.size(); ++i)	//当前字符串依次与后面字符串对比
    	{
    		if (strRepetition.find(("," + to_string(i))) != -1)	//判断是否是已对比后的下标
    			continue;
    		int j = i + 1;
    		int subNum = 0;				//该字符串重复的个数
    		while (j < strSub.size())
    		{
    			if (strSub[i] == strSub[j])
    			{
    				subNum++;
    				strRepetition += ("," + to_string(j));		//存重复字符串的下标,下次循环直接跳过
    			}
    			j++;
    			if (j == strSub.size())						//对重复的字符串只保存一次
    			{
    				if (subNum > 0)
    				{
    					res.push_back(strSub[i]);
    				}
    			}
    		}
    	}
    	for (int i = 0; i<res.size(); i++){
    		cout << res[i] << endl;
    	}
    	system("pause");
    	return 0;
    }

     

    点赞 评论 复制链接分享
  • qfl_sdu qfl_sdu 2021-06-12 23:35

    代码如下,如有帮助,请给个采纳,谢谢。

    #include <iostream>
    #include <map>
    #include <string>
    using namespace std;
    
    //遇到" "即将字符串分割成小字符串
    void DealStr(string pStr, char ch,map<string,int>& mapReturn)
    {
    	string strtmp = "";
    	int nStartPos=0;
    	int nEndPos=0;
    	map<string,int>::iterator it;
    	while((nEndPos = pStr.find(ch,nStartPos))> 0)
    	{
    		strtmp = pStr.substr(nStartPos,nEndPos - nStartPos);
    		
    		if(!strtmp.empty())
    		{
    			it = mapReturn.find(strtmp);
    			if (it == mapReturn.end())
    			{
    				mapReturn.insert(pair<string,int>(strtmp,1));
    			}else
    			{
    				int nmb = it->second + 1;
    				mapReturn.erase(it);
    				mapReturn.insert(pair<string,int>(strtmp,nmb));
    			}
    			
    		}
    		nStartPos = nEndPos+1;
    	}
    	nEndPos=pStr.find('\0',0);
    	strtmp = pStr.substr(nStartPos,nEndPos-nStartPos);
    	if(!strtmp.empty())
    	{
    		it = mapReturn.find(strtmp);
    		if (it == mapReturn.end())
    		{
    			mapReturn.insert(pair<string,int>(strtmp,1));
    		}else
    		{
    			int nmb = it->second + 1;
    			mapReturn.erase(it);
    			mapReturn.insert(pair<string,int>(strtmp,nmb));
    		}
    	}
    }
    
    int main()
    {
    	char buf[200] = {0};
    	cout <<"请输入一个字符串:";
    	cin.getline(buf,200);
    	map<string,int> vout;
    	DealStr(buf,' ',vout);
    	map<string,int>::iterator it = vout.begin();
    	for (; it != vout.end(); it++)
    	{
    		if(it->second > 1)
    			cout << it->first << endl;
    	}
    	return 0;
    }
    点赞 评论 复制链接分享
  • L_Red_Forest L_RedForest 2021-06-17 01:34
    #include <iostream>
    #include <unordered_map>
    using namespace std;
    
    int main() {
        string s;
        getline(cin,s);
        string str;//表示单词
        unordered_map<string,int>map;
        for (int i = 0; i < s.size(); ++i) {
            int j = 1, k = i;//j表示当前判断单词的长度, s[k] 表示当前判断的字符
            while (s[k] != ' ' && k < s.size()) k++, j++;
            str = s.substr(i, j - 1);//碰到空格将答案更新为s从i开始的 j - 1个长度的字符
            map[str]++;//该单词次数加 1
            if (map[str] > 1) cout << str << endl;
            i = k;//更新 i
        }
    
        return 0;
    }

     

    点赞 评论 复制链接分享

相关推荐