POJ1002
1#include <iostream>
2#include <cstring>
3#include <stdlib.h>
4using namespace std;
5
6int cmp(const void *a,const void *b)
7{
8 return strcmp((char *)a,(char *)b);
9}
10
11int main()
12{
13 char map[27]="22233344455566677778889999";
14 char a[100000][9];
15 char temp[1000];
16 int n,i,j;
17 bool flag=true;
18 cin>>n;
19 for(i=0;i<n;i++)
20 {
21 int k=0;
22 cin>>temp;
23 for(j=0;temp[j]!='\0';j++)
24 {
25 if(k==3)
26 {
27 a[i][k++]='-';
28 // continue;
29 }
30 if(temp[j]=='-')
31 continue;
32 else
33 if(temp[j]>='A'&&temp[j]<='Z')
34 a[i][k++]=map[temp[j]-'A'];
35 else
36 a[i][k++]=temp[j];
37 }
38 a[i][k]='\0';
39
40
41 }
42 qsort(a,n,9,cmp);
43
44 i=0;
45 while(i<n)
46 {
47 j=i;
48 i++;
49 while(strcmp(a[i],a[j])==0)i++;
50 if(i-j>1)
51 {
52 cout<<a[j]<<" "<<i-j<<endl;
53 flag=false;
54 }
55
56 }
57 if(flag)
58 cout<<"No duplicates"<<endl;
59
60
61 return 0;
62}
犯了一个严重的低级错误,忘了输出
No duplicates.
额。。。代码好像贴错了
少了一个.
对于在一群字符串中找到相同的字符串,并按字典顺序输出该字符串和其重复次数,可以参考这段代码
qsort(a,n,9,cmp);
i=0;
while(i<n)
{
j=i;
i++;
while(strcmp(a[i],a[j])==0)i++;
if(i-j>1)
{
cout<<a[j]<<" "<<i-j<<endl;
flag=false;
}
}
先将所有字符串排序,然后看相邻的有多少个相同的字符串,然后直接输出了。
不过对于将重复的字符串按照重复的次序输出,这个目前思绪还比较乱,最好来个人给俺指点一下