字符串处理:九度OJ-题目1199:找位置
先来给出题目链接 http://ac.jobdu.com/problem.php?pid=1199
这是一道水题,但是自己很久没敲代码的原因,20分钟才搞定
开始的时候,脑子发热,看错题了,样例给的输出里面没有A和B,我还以为字符串里的字符都转换成小写的,回头才看出来。
分析:
主要就是字符统计 1.现用sum来控制整体的处理单个字符的次数。
2.在第一层循环里面,再用第二层循环处理每个不同的字符。
3.在处理不同字符的之前,先要排除掉没有重复的字符。
---------------------------------------------------------------华丽丽的分割线----------------------------------------------------------------
以下是供参考的代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 const int maxn=100+5; 6 char str[maxn]; 7 int flag[maxn]; 8 9 int main() 10 { 11 while(scanf("%s",str)!=EOF) 12 { 13 char first=str[0]; 14 int sum=0; 15 int len=strlen(str); 16 //for(int i=0;i<len;i++) 17 //str[i]=tolower(str[i]); 18 memset(flag,0,sizeof(flag)); 19 while(sum<len) 20 { 21 for(int k=0;k<len;k++) 22 if(flag[k]==0) 23 { 24 first=k; 25 break; 26 } 27 int counter=0,h=0; 28 while(h<len) 29 { 30 if(str[h]==str[first]) 31 counter++; 32 h++; 33 } 34 if(counter==1) 35 { 36 flag[first]=1; 37 sum++; 38 continue; 39 } 40 for(int j=first;j<len;j++) 41 if(flag[j]==0&&(str[j]==str[first])) 42 { 43 printf(j==first?"%c:%d":",%c:%d",str[j],j); 44 flag[j]=1; 45 sum++; 46 } 47 cout<<endl; 48 } 49 } 50 return 0; 51 }