请教一个 C语言 字符串数组之间比较的算法,谢谢

我把10个ip地址,赋值给了10个字符串数组,现在想比较它们之间的异同,相同的删除,重重复的优先级+1,想请您帮助的是,者10个字符串数组应该用什么办法进行比较呢,如果一一比较的话得40多次,太麻烦,请问有好的算法吗,谢谢

这种时候当然是使用标准容器拉
std::map可以满足你的需要

10个ip 地址 复制给10个std::string. 然后构造一个 std::map<std::string, int> 再逐个使用insert方法插入, 如果插入成功(通过检查insert的返回值, 具体请搜索msdn,这里篇幅有限。)

如果插入成功, 继续; 不成功,就表示有重复,将返回的那个已经存在的ip对应的优先级++, 再继续。

map的特点就是不重复,你省去了自己去写比较,去优化的繁琐,而且一般stl实现的效率都是很高的绝对不是你这种40多次的O(N)的,应该至少都是o(ln N)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-19
定义一个二维数组char str[10][20];
然后把str[0]~str[9]看成10个字符串数组名就可以用循环了,再用一个数组int a[10]来记录优先级(a[]不要忘了初始化)
如:
n=9//用来保存还剩几个字符串
for(i=0;i<=n;i++)
{
for(j=i+1;j<=n;j++)//为什么这么循环就不用说了吧
{
if(strcmp(str[i],str[j]==0))
{
for(k=j+1;k<=n;k++)
{
strcpy(str[k-1],str[k]);
a[k-1]=a[k];
}
n--;
a[i]++;
}//整个if就是从与前面相同的那个开始整体往前移一位达到删除的效果当然a[]也要移来保持一一对应,然后a[i]自加一表示优第i个的优先级加一
}
}
输出时str[0][20]~str[n][20]就是剩下的ip地址a[0]~a[n]就是ip地址所对应的优先级
代码没编译过,可能有些小问题,主要是说说方法

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网