you are my friend #
4 题目分析: map问题,按照空格分开成子串进行map,如果没有出现进加一,标记该子串已出现。 注意:连续空格和全是空格的情况。 AC代码:/** *@xiaoran *map,但是可能有多个空格 */ #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<string> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<cstdlib> #include<cctype> #include<cmath> #define LL long long using namespace std; int main() { string s; while(getline(cin,s)&&s!="#"){ map<string, int> Hash; int i,k=0,len=s.size(),res=0,ok=1; for(i=0;i<len;i++){ if(s[i]!=' '){ break; } } if(i==len){//注意全是空格的情况 cout<<"0"<<endl; continue; } k=i; for(int i=k;i<len;i++){ if(ok==1&&s[i]==' '){ if(Hash[s.substr(k,i-k)]==0){ res++; Hash[s.substr(k,i-k)]=1; } ok=0;//重新标记起点 } else if(ok==0&&s[i]!=' '){ k=i; ok=1; } } if(ok==1&&Hash[s.substr(k,len-k)]==0){//别忘记最后一个 res++; } cout<<res<<endl; } return 0; }
原文地址:http://blog.csdn.net/fool_ran/article/details/42553253