c语言去字符串重复元素,[蓝桥杯][算法提高VIP]删除重复元素 (C语言代码)

解题思路:

我的思路就是使用一个数组来储存每一个字符出现的次数,最后判断对应位置上的数组元素是否为1(因为删除的重复元素且不相邻的也算),例如:先设两个数组 char a[101]; int b[101](b的初始值全都为0);a用来储存输入的字符串,b用来判断字符串每一个位置上的字符串出现的次数。看下面例子:

a="432112",遍历这个字符串:第一个元素是4,那把b的4号位的元素加一(即0+1=1);第2个元素是3,那么把b数组3号位的元素加1;第3个元素把b数组2号位元素值加一,第4个元素是1把b数组的1号位元素值加一,第5个元素是1,把b数组的1号位元素加一(注意此时b数组的1号位元素值为2,因为前面加过一次了);后面原理一样。最终a、b数组的元素如下;元素

下标012345678字符串a432112\0

数组b2211

上面表格得出;不重复的元素只有3 4(因为出现次数均为1)

注意事项:

注意b数组的的含义

参考代码:#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

using namespace std;

const int maxn=1<<8;

char p[maxn];

int str[maxn];

int main()

{

fgets(p, maxn, stdin);

for(int i = 0, len = strlen(p); i 

{

str[p[i]]++;    //统计每一个字符出现的次数

}

for(int i = 0, len = strlen(p); i 

{

if(str[p[i]] == 1)

{

printf("%c", p[i]);

}

}

printf("\n");

return 0;

}

或许有人数,题目要求要用指针,其实用数组来做本质上就是操作指针的,那么我在给一个指针的代码:

(注意数组和指针的异同,数组名不能用自增自减运算符,因为--  ++作用的对象是左值)#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

using namespace std;

const int maxn=1<<8;

char p[maxn];

int str[maxn];

int main()

{

fgets(p, maxn, stdin);

for(int i = 0; *(p+i); ++i) //注意不要用++p

{

str[*(p+i)]++;

}

for(int i = 0; *(p+i); ++i)

{

if(str[*(p+i)] == 1)

{

printf("%c", *(p+i));

}

}

printf("\n");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值