请教一个 C语言 字符串数组之间比较的算法,谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个 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) 参考技术A 定义一个二维数组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地址所对应的优先级
代码没编译过,可能有些小问题,主要是说说方法
以上是关于请教一个 C语言 字符串数组之间比较的算法,谢谢的主要内容,如果未能解决你的问题,请参考以下文章