论坛首页 编程语言技术论坛

百度面试题

浏览 3882 次
锁定老帖子 主题:百度面试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-23  
C++
一、 一个文本文件有多行,每行为一个URL。请编写代码,统计出URL中的文件名及出现次数。

  a) 文件名不包括域名、路径和URL参数,例如http://www.rs.com/n.op/q/rs?id=1中的文件名是rs。

  b) 部分URL可能没有文件名,例如http://www.abc.com/,这类统计为“空文件名”。

  c) 出现在不同URL中的相同文件名视为同一文件名,例如http://www.ceshi.com/hi.php和ftp://ftp.cdef.com/hi.php为同一文件名

  文件内容示例如下:

  http://www.test.com/abc/de/fg.php?id=1&url=http://www.test.com/index.html

  http://www.ceshi.com/hi.jsp

  ftp://ftp.ceshi.com/hi.jsp

  http://www.hello.com/cw/hi.jsp?k=8

  http://www.hi.com/jk/l.html?id=1&s=a.html

  http://www.rs.com/n.op/q/rs?id=1

  http://www.abc.com/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void UrlFileName(char* fileName, char* p[], int nLen);
void GetUrlFileName(const char* fileName);
char* StringTrim(char* pFile);
char* GetFileName(const char* pstrUrl,int nStrLen);

void UrlFileName(char* fileName, char* p[], int nLen)
{
	int nCount = 0;
	for(int i = 0 ;i < nLen;++i)
	{
		if(!strcmp(p[i], fileName))
		{
			++nCount;
		}
	}
	printf("文件名%s出现的次数为%d\n", fileName, nCount);
	free(p[i]);
}

void GetUrlFileName(const char* fileName)
{
	FILE* fRead = fopen(fileName, "r");
	FILE* fWrite = fopen("d:\\write.txt", "w");
	char szFile[1000] = {0};
	char* p[100] = {NULL};
	char* p1[100] = {NULL};
	int index = 0;
	int nflag = 0;
	int index1 = 0;
	while(1)
	{
		memset(szFile, 0, 1000);
		fgets(szFile, 1000, fRead);
		strcpy(szFile, StringTrim(szFile));
		int nStr = strlen(szFile);
		if(nStr == 1 || nStr == 0) continue;
		fputs(szFile, fWrite);
 		p[index] = GetFileName(szFile, nStr);
		for(int i = 0;i < index1;++i)
		{
			if(!strcmp(p1[i], p[index]))
			{
				++nflag;
				break;
			}
		}
		if(nflag == 0)
		{
			p1[index1] = p[index];
			++index1;
		}else
		{
			nflag = 0;
		}
		++index;
		if(feof(fRead)) break;
	}
	for(int i = 0;i < index1;++i)
	{
		
		UrlFileName(p1[i], p, index);
	}
	fclose(fRead);
	fclose(fWrite);
}
/*
去除前后空格
   abcdefg   
*/
char* StringTrim(char* pFile)
{
	char* pStr = pFile;
	while(*pFile != 0)
	{
		if(*pFile != ' ')
		{
			break;
		}else
		{
			++pStr;
		}
		++pFile;
	}
	int i = strlen(pFile) - 1;
	do 
	{
		if(*(pFile+i) != ' ')
		{
			break;
		}else
		{
			*(pStr+i) = '\0';
		}
		--i;
	} while (i >= 0);

	return 	pStr;
}

/*
截取最后一个反斜的杠的位置和"?"号的位置
*/
char* GetFileName(const char* pstrUrl,int nStrLen)
{
	char* pUrlName = (char*)malloc(20);
	memset(pUrlName, 0, 20);
	int i = 0;
	int nCount1 = 0;
	int nCount2 = 0;
	do
	{
		if('/' == *(pstrUrl+i))
		{
			if(nCount1 != 0)
			{
				nCount1 = 0;
			}
			nCount1 += i;
		}
		if('?' == *(pstrUrl+i))
		{
			nCount2 += i;
			break;
		}
		++i;
	}while(i < nStrLen);

	if(!nCount2)
	{
		nCount2 = i-1;
	}
	i = nCount1 + 1;
	int urlIndex = 0;
	if(i == nCount2)
	{
		pUrlName = "空文件";
	}else
	{
		for(;i < nCount2;++i)
		{
			*(pUrlName+urlIndex) = *(pstrUrl+i);
			++urlIndex;
		}
	}
	return pUrlName;
}
   发表时间:2009-06-08   最后修改:2009-06-08
list = []
File.open("urllist.txt","r").each{ |line|
	line.chomp =~ /.*?\:\/\/.*\/([^?]*).*/
	list << $1
}
list.uniq!
4 请登录后投票
   发表时间:2009-06-08  
这不就是正则的用途吗?
用正则编写,程序可读性增强一万倍。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics