Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4824641
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: C/C++

2009-07-03 17:18:56

 一个文本文件有多行,每行为一个URL。请编写代码,统计出URL中的文件名及出现次数。
  a) 文件名不包括域名、路径和URL参数,例如
中的文件名是forumdisplay。
  b) 部分URL可能没有文件名,例如
,这类统计为“空文件名”。
  c) 出现在不同URL中的相同文件名视为同一文件名,例如和
为同一文件名
  文件内容示例如下:
  

  
  
  
  
  
  
   
以上url地址经修改,不影响试题内容。

  

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

#define MAX 100

typedef struct node
{
  int count;
  char name[20];
  struct node* next;
  }NODE;
  
NODE* find(NODE* head,char* name)
{
  NODE* p = head->next;
  while(p!=NULL)
   {
     if(strcmp(p->name,name) == 0)
       break;
     else
       p = p->next;
     }
   return p;
}

int list_print(NODE* head)
{
  NODE* p = head->next;
  while(p!=NULL)
   {
       printf("%s\t%d\n",p->name,p->count);
       p = p->next;
     }
   return 0;
}

int my_free(NODE* head)
{
  NODE* p = head;
  NODE* q = NULL;
  while(p!=NULL)
  {
      q = p;
      p = p->next;
      free(q);
  }
  return 0;
 }
 
int main(int argc, char *argv[])
{

  FILE* fp = fopen("url.txt","r");
  if( fp==NULL )
    {
     printf("fopen error\n");
     return -1;
     }
  char* buf = (char*)malloc(100);
  if(buf == NULL)
    {
     printf("malloc error\n");
     return -1;
     }
  memset(buf,0,100);
    
  NODE* head = (NODE*)malloc(sizeof(NODE));
  if(head == NULL)
    {
     printf("malloc error\n");
     return -1;
     }
  head->next = NULL;
  
  NODE* p = head;
    
   while(fgets(buf,100,fp)!=NULL)
    {
     sprintf(buf,"%s",strrchr(buf,'/'));
     buf++;
     if(*buf=='\0')
      {
        sprintf(buf,"%s","none file name");
       // continue;

      }
     else
      {
        char* tmp = buf;
        while(*tmp != '\0')
         {
           if(*tmp == '.')
             *tmp = '\0';
           else
             tmp++;
          }
      }
     printf("%s\n",buf);
      
      NODE* tmp = find(head,buf);
      if(tmp == NULL)
       {
         NODE* q = (NODE*)malloc(sizeof(NODE));
         if(q == NULL)
          {
           printf("malloc error\n");
           return -1;
          }
         q->count = 1;
         sprintf(q->name,"%s",buf);
         q->next = p->next;
         p->next = q;
         p = q;
         //list_print(head);

       }
      else
       {
          (tmp->count)++;
         }
    }
   list_print(head);
   my_free(head);
   free(buf);
   buf = NULL;
  system("PAUSE");    
  return 0;
}

阅读(738) | 评论(0) | 转发(0) |
0

上一篇:有汉字的大小写转换

下一篇:字符集 locale

给主人留下些什么吧!~~