去重数组中相同的字符串

关于数组去重的问题,昨天弄了半天,终于弄出来了,现在记录下来,方便以后温故知新。

    思路:
  像char *b[10] = {"ta","tab","tac","tad","taf","tafa","ta","tass","tad","ac"};想这样的数组,想把重复的字符串去除,最后得到不相同的字符串。
  以上面的数组b为例,首相我们取出第一个字符串“ta”,由于它前面没有需要比较字符串,所以我们从第二个字符串开始。当取到“tab”时,
判断它与b[0]指针所指向的字符串是都相同,若不同,则把“tab”的指针存到b[1]中; 若相同,则把依次操作b[1]=b[2; b[2] = b[3];.......b[7] =b[8];
  b[9] = NULL(注意要把最后的以个指针置空),下次取指针比较时。从b[1]开始(因为b[1]以后的指针都向前挪动了一位)。此处b[1]所指的字符串
             跟b[0]所指的字符串不同,故下次从b[2]开始去指针,跟前面的指针所指的字符串进行比较。之后就是循环执行上面的过程。  代码如下(在vs08上运行的):
           #include <stdio.h>
          #include <string.h>


         bool sor(const char* a, const char* b) // 比较两个数组的内容是否相等
        {
       // bool flag = true;
         int g = strlen(a);
   int h = strlen(b);
  if(g!=h)
 return false;
  else 
  {
 int i;
for( i = 0; i<g; i++)
{
if(a[i] != b [i])
{
    return false;
}
}
if ( i == g)
return true;
    }
}


int main ()
{
int e = 0;   //用来标记相同的字符串个数,以便实时缩短数组的长度;
int i;   
char *b[10] = {"ta","tab","tac","tad","taf","tafa","ta","tass","tad","ac"};

for ( u = 1; u < 10-e; ++u)     //应为第一个总是不同的,故从第二个开始
{
for(int j=u-1; j>=0; j--)          //取的字符串跟前面的一次比较
{
if(sor(b[u],b[j]))                 //相同,则依次向前挪一位
{      
for(int k=u; k<10; k++)
{
b[k] = b[k+1];
}

--u;
e++; 
b[10-e] = NULL;   //把挪位后剩余的当前最后一个指针置空
}
}
}
for (int p=0; p<u; p++)
{
printf("%s ",b[p]);                //打印去重后的数字内的字符串
}
printf("\n");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值