poj 1002 电话号码\字符串处理
2015-06-17 19:47
246 查看
...读题一定要仔细啊最后说如果电话中没有重复的号码需要输出No duplicates.
还有就是看discuss板块是有好处的
看了一些博客都说要变成数组,但是直接转换成string串我感觉更好想
注意就是怎么转换, 输入用char 字符数组, 然后和string转换时候用强制转换(string)q,这里假设q是char字符数组
Q和Z不传给串里就好了,忽略,
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
char a[100005][20];//a是原始输入用的每个字符串
char s[20];//s是一个临时存放处理时的串,然后转换成string类存到q里
string q[100005];//q是准备处理之后都是数字之后的串
bool cmp(string x, string y)
{
return x < y;
}
int main()
{
int n, m, i, j, k;
int t, tt, con;
while(~scanf("%d", &n))
{
for(i = 0; i < n; ++i)
{
scanf("%s", a[i]);
t = strlen(a[i]);
con = 0;
for(j = 0, k = 0; j < t; ++j)
{
if(a[i][j] =='-')continue;
if(a[i][j]>='A'&&a[i][j]<='Y'&&a[i][j]!='Q')
{
if(a[i][j]>='A'&&a[i][j]<='C')
{
s[k++] = '2';
}
else if(a[i][j]>='D' &&a[i][j]<='F')
{
s[k++] = '3';
}
else if(a[i][j]>='G' &&a[i][j]<='I')
{
s[k++] = '4';
}
else if(a[i][j]>='J' &&a[i][j]<='L')
4000
{
s[k++] = '5';
}
else if(a[i][j]>='M' &&a[i][j]<='O')
{
s[k++] = '6';
}
else if(a[i][j]>='P' &&a[i][j]<='S')
{
s[k++] = '7';
}
else if(a[i][j]>='T' &&a[i][j]<='V')
{
s[k++] = '8';
}
else if(a[i][j]>='W' &&a[i][j]<='Y')
{
s[k++] = '9';
}
}
else if(a[i][j]!='Q'&&a[i][j]!='Z')
{
s[k++] = a[i][j];
}
}
s[k] ='\0';
q[i] = (string)s; //这里强制转换成string类,不知道string串的最后一个字符是不是'\0', 我加了输出不正确就是了.
//puts(s);
}
sort(q, q+n, cmp);
// for(i = 0; i < n; ++i)
// {
// cout << "---" << q[i] << endl;
// }
tt = 1;
int con = 0;
for(i = 1; i <= n; ++i)
{
if(q[i]==q[i-1])
{
tt++;
}
else
{
if(tt>1)
{
for(k = 0; k < q[i-1].size(); ++k)
{
if(k == 3)printf("-");
cout << q[i-1][k];
}
printf(" %d\n", tt);
con = 1;
tt = 1;
}
}
}
if(con == 0)printf("No duplicates.\n");
}
return 0;
}
还有就是看discuss板块是有好处的
看了一些博客都说要变成数组,但是直接转换成string串我感觉更好想
注意就是怎么转换, 输入用char 字符数组, 然后和string转换时候用强制转换(string)q,这里假设q是char字符数组
Q和Z不传给串里就好了,忽略,
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
char a[100005][20];//a是原始输入用的每个字符串
char s[20];//s是一个临时存放处理时的串,然后转换成string类存到q里
string q[100005];//q是准备处理之后都是数字之后的串
bool cmp(string x, string y)
{
return x < y;
}
int main()
{
int n, m, i, j, k;
int t, tt, con;
while(~scanf("%d", &n))
{
for(i = 0; i < n; ++i)
{
scanf("%s", a[i]);
t = strlen(a[i]);
con = 0;
for(j = 0, k = 0; j < t; ++j)
{
if(a[i][j] =='-')continue;
if(a[i][j]>='A'&&a[i][j]<='Y'&&a[i][j]!='Q')
{
if(a[i][j]>='A'&&a[i][j]<='C')
{
s[k++] = '2';
}
else if(a[i][j]>='D' &&a[i][j]<='F')
{
s[k++] = '3';
}
else if(a[i][j]>='G' &&a[i][j]<='I')
{
s[k++] = '4';
}
else if(a[i][j]>='J' &&a[i][j]<='L')
4000
{
s[k++] = '5';
}
else if(a[i][j]>='M' &&a[i][j]<='O')
{
s[k++] = '6';
}
else if(a[i][j]>='P' &&a[i][j]<='S')
{
s[k++] = '7';
}
else if(a[i][j]>='T' &&a[i][j]<='V')
{
s[k++] = '8';
}
else if(a[i][j]>='W' &&a[i][j]<='Y')
{
s[k++] = '9';
}
}
else if(a[i][j]!='Q'&&a[i][j]!='Z')
{
s[k++] = a[i][j];
}
}
s[k] ='\0';
q[i] = (string)s; //这里强制转换成string类,不知道string串的最后一个字符是不是'\0', 我加了输出不正确就是了.
//puts(s);
}
sort(q, q+n, cmp);
// for(i = 0; i < n; ++i)
// {
// cout << "---" << q[i] << endl;
// }
tt = 1;
int con = 0;
for(i = 1; i <= n; ++i)
{
if(q[i]==q[i-1])
{
tt++;
}
else
{
if(tt>1)
{
for(k = 0; k < q[i-1].size(); ++k)
{
if(k == 3)printf("-");
cout << q[i-1][k];
}
printf(" %d\n", tt);
con = 1;
tt = 1;
}
}
}
if(con == 0)printf("No duplicates.\n");
}
return 0;
}
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- ACM题库以及培养策略
- 排序算法之快速排序
- 网易2018校招题
- Puzzle, ACM/ICPC World Finals 1993, UVa227