487-3279 编码规范化和计数 百练2974

百练的编码框
由于显示问题有的注释
复制过去会自动换行
原来是不要紧的啊
···

include

include

include

using namespace std;

char map[] = "22233344455566677778889999";
char str[80], telNumbers[100000][9];

int compare(const void elem1, const voidelem2) {//为函数模板sort定义数组元素的比较函数
return(strcmp((char)elem1, (char)elem2));
}

void standardizeTel(int n) {
int j, k;//j用来计原来的字符数,k为标准化后的。
j = k = -1;
while (k < 8) {
j++;
if (str[j] == '-')//用“-”就会报错: E0042 操作数类型不兼容("char" 和 "const char *")
continue;//跳出本次循环
k++;
if (k == 3) {
telNumbers[n][k] = '-';//第四位
k++;
}
if (str[j] >= 'A'&&str[j] <= 'Z') {
telNumbers[n][k] = map[str[j] - 'A'];
continue;//跳出本次循环
}
telNumbers[n][k] = str[j];
}
telNumbers[n][k] = '\0';
return;
}

int main()
{
int n, i, j;
bool noDuplicate;

cin >> n;
for (i = 0; i < n; i++) {
    cin >> str;
    standardizeTel(i);
}

qsort(telNumbers, n, 9, compare);

noDuplicate = true;
i = 0;
while (i < n) {
    j = i;
    i++;
    while (i < n&&strcmp(telNumbers[i], telNumbers[j]) == 0)
        i++;
    if ((i - j) > 1) {
        cout << telNumbers[j] << " " << i - j<

}

···

你可能感兴趣的:(487-3279 编码规范化和计数 百练2974)