4.3例题--487-3279--2974

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void * elem1 , const void * elem2)
{
    return (strcmp((char * )elem1 , (char * )elem2 ));
} 
int main(int argc, char *argv[])
{
    char tmp[80], telNote[100001][9];
    char map[]="22233344455566677778889999";
    int n, k, i, j, count, duplicate;
    
    scanf("%d",&n);
    for( i = 0 ; i<100001 ; i++)
        memset(telNote[i],0,sizeof(telNote[i]));
    for( k=0 ; k<n ; k++ )
    {
        scanf("%s",tmp);
        //电话号码标准化 
        for( i=0,j=0 ; tmp[i]!='\0' ; i++)
        {
             if( tmp[i]>='0' && tmp[i]<='9' ) telNote[k][j++] = tmp[i] ;
             else if(tmp[i]>='A'&&tmp[i]<='Z') telNote[k][j++] = map[tmp[i]-'A'] ;
        }
    }
    //电话号码本排序
    qsort(telNote, n, 9, compare);
        
    //比较是否有重复的电话 
    k = 0;
    duplicate = 0;
    while( k<n )
    {
        i = k;
        j = k+1;
        count = 0;
        while( j<n && strcmp(telNote[i],telNote[j])==0 )
        {
            count++;
            j++;
        }
        if(count!=0)//有重复,输出 
        {
            duplicate = 1;
            printf("%c%c%c-%c%c%c%c %d\n",telNote[k][0],telNote[k][1],telNote[k][2],telNote[k][3],telNote[k][4],telNote[k][5],telNote[k][6],count+1);
            //printf("%s-%s %d",substr(0,3),substr(3,4),count);
        }
        k = j ;
    }
    if( duplicate==0 ) printf("No duplicates.\n");
  
  system("PAUSE");	
  return 0;
}

Q1:memset的使用。使用字符串数组的时候要注意初始化,或者在最后加'\0'
    memset的原型:extern void *memset(void *buffer, int c, int count);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值