C语言 删除重复字符

C语言 删除重复字符,第1张

程序的基本思路是把输入的字符串放到a[100]字符组中,然后把a[100]中所有不重复的字符添加到b[100]中,间接完成对字符串中的重复字符的删除

#include<stdioh>

void

main()

{

char

a[100],b[100];

//定义两个字符组,a[100]用来接收输入的字符串,b[100]用来存储不重复的字符

int

pa=0,pb=0,i,flag;

scanf("%s",a);

//输入字符串到a[100]中,用scanf读入到a[100]中会自动在a[100]中字符串结束的地方加上'\0'

for(pa=0;a[pa]!='\0';pa++)

//for循环结束的条件是a[pa]==0,也就是从a[100]字符组中读取一个字符,直到没有

{

flag=1;

//flag是个标志符,当flag==1时,说明这个字符(下句中的a[pa])是第一次出现,应该加入到b[100]中

//如果flag==0,说明这个字符(下句中的a[pa])重复了,不应该加到b[100]中

for(i=0;i<pb;i++)

if(b[i]==a[pa])

flag=0;

//把a[100]中读取的字符a[pa]与b[100]中的所有字符进行比较,如果b[i]==a[pa]

//说明这个字符已经在b[100]中了,也就是重复字符了,所有将flag=0,不能加入b[100]中

//如果a[pa]与b[100]中的所有字符都不相等,说明这个字条是第一次出现,应该加到b[100]

if(flag)

{

b[pb]=a[pa];pb++;

}

//如果flag==1,则将a[pa]这个字符加入到b[100]中,然后将pb加1

}

b[pb]='\0';

//当所有的不重复的字符都加入到b[100]中时,将b[100]中字符结束的地方加'\0',也就是b[pb]='\0'

//因为字符串都是民'\0'结尾的,所以加上这句

printf("%s\n",b);

//输出b[100]中的字符串,也就是删除过重复字符之后的了

}

intp型人格的人适合的职业有很多啊,比如说教师、护理、公务员、医生、心理学工作者、艺术工作者、服务行业等, intp型人格的人比较喜欢和人交流,喜欢帮助人,这样的人比较适合做一些服务行业的工作,比如护士,老师,医生,公务员等。

intp-t型人格适合什么样的职业

intp-t型人格适合的职业是:

1、艺术工作者:艺术家、作家、音乐家、演员、导演等。

2、设计工作者:室内设计师、服装设计师、平面设计师、建筑设计师、广告设计师等。

3、科学研究者:科学家、工程师、研究人员、实验室技术人员等。

4、医生:医生、护士、医疗器械技术人员、牙科技师等。

5、教师:教师、心理咨询师、教育工作者、社会工作者等。

ma——a的最大容量,必须大于na

n=12——求n的阶

p——求阶乘时的当前乘数

/

#include<stdioh>

#define Ma 10000

int pa;/指向数组a的有效末端/

int p=2;

int memory_over=0;

union data

{ unsigned long int b;

struct

{unsigned l:16;

unsigned h:16;

}m;

}a[Ma];

/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

算法说明1:考虑到result比较长,我用a[Ma]b来存储n!的result,每一位a[pa]b能存储4位10进制数字。

因为我定义的数组是静态的,所以Ma应该足够大。

ps:其实只用定义一个unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa]b),但是我考虑到可能会访问每一结点b[pa]的高16位(a[pa]mh)和低16位(a[pa]ml),但是的我考虑是多余的!!不用像我这样定义这么复杂的共用体!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/

unsigned int cashe;

unsigned int carry;

void main()

{

unsigned int n;/求n的阶/

void facto(unsigned int n);

printf("Input n:");

scanf("%u",&n);

/=================开始求阶乘!=============/

a[0]b=1;/初始化/

facto(n);

/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

算法说明2:上面这句直接调用facto(n)来求n!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/

/========================以下是显示最后结果====================================/

if(memory_over==0)

{printf("the result include %dNO:\n",pa+1);

printf("%u",a[pa--]ml);

for(;pa>=0;pa--)

printf("%04u",a[pa]ml);

printf("\n");

}

getch();

}

/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

算法说明2:求阶函数facto(n)说明:

这个函数会不断地调用multiple(),它的作用是每被调用一次就使得a[pa]b与阶数p相乘一次,直到乘完n为止!

{multiple();

p++;/每一轮乘一个阶数p/

}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/

void facto(unsigned int n)

{void multiple();

pa=0;

while(pa<Ma-1&&p<=n)/容量限制/

{multiple();

p++;/每一轮乘一个阶数p/

}

if(p<=n)

/如果当前的存储结果的数组a[Ma]不够用!应提高Ma/

}

/==============================================================================

算法说明3:乘法函数multiple()说明:负责a[pa]b与阶数p相乘。

a[pa]b有很多结点,a[0]b、a[1]b、a[2]b、a[3]b、a[4]b、。。。

当然是从低结点a[0]b开始不断与p相乘,产生的“进位”加到高位a[1]b,直到a[pa]bp为止!

随着结果数值增大,pa个结点的a[]b可能容纳不下结果,所以如果a[pa]b与p相乘后还有“进位”carry,就扩大pa,并把carry放入到新增加的结点:

if(carry>0)

a[++pa]b=carry;

===================================================================================/

void multiple()

{int i=0;

carry=0;

while(i<=pa)/i指向当前处理的元素a[i],每一轮用一个位与阶数p相乘/

{a[i]b=a[i]bp+carry;/计算结果,要考虑来自低位的进位/

carry=a[i]b/10000;/计算进位/

a[i]b=a[i]b%10000;/计算余数/

i++;

}

if(carry>0)

a[++pa]b=carry;

}

intj和intp的聪明没法比的,两者很多时候只是分工的不同,同等级的intj和intp是很好的搭档。但事实上,intj最终还是太孤单了,intp最终还是跟一群intp一起研究,因为intj很难遇到那个同等级的intp,intp也很难遇到那个同等级的intj。

1、intp的聪明在于从原初的理论原点出发,去寻找这个理论原点相近或相似的下一个理论原点,并且逐渐形成自己比较单一的体系。

而intj的聪明在于将已经存在的理论原点进行有规矩的整理,形成一个精密无比宏大精深的体系。

所以,对于intp的困难之处为:如果两个理论原点相隔太远,intp很难发现这两者之间的深刻联系。这一点恰恰是intj最为擅长,结果是intp有时候很难跟上intj的思维。

对于intj的困难之处为,intj可能很难去真正发现或创造一个理论,正如黑格尔引用圣经所说:太阳底下没有新鲜事物。久而久之,intj容易迷离。

所以,intp的特点是思维精准的、富有逻辑的、更加理论化的、更加理性的,因为intp研究是A点与B点关系,再是B点与C点关系。估计这样精准理性,很能得到别人的理解。

intj的特点是思维不精准的、没有逻辑的、没有理论化的,甚至没有理性的,因为intj研究的是A点P点关系,再是P点与H点的关系。intj百分百虐死你。

2、intj更加自信,或者极度谦虚。东方朔在山沟沟里经常喊“俺东方朔天下第一”的节奏。要么是诸葛亮在乡下的时候,经常老子多,每次都自比管仲乐毅。

intp保持常态。头脑里想着某个理论应该怎么样,没intj这么自恋。

3、intj更加独立。经常是自干自的,很有个人主见,都要自己拿主意才可以。不论谁的意见都不足以作为intj行动的来源,顶多只是intj作为参考性的建议。

而intp,有时候遇到intp,你根本认不出他会是intp。如果是浅交,intp没有特别深刻的特点。

4、intj是真正的奇才,故而很多时候无法被众人所理解。

intp最合适去教大学生,带博士生,当然是国外。

5、intj要么足智多谋、要么圣贤下凡。精通儒学、心学,渴望天下归心,决胜千里,又带得一手好兵。

intp,数学家(尤其是女数学家),精通数理学等。

6、intp们只是用不同的方式解释世界,而问题在于改变世界。 ——intj如是说

entp-a和INTP相处还蛮和谐。

因为这两种人格都是社交随和派,不会给彼此太多“亲近”捆绑,聊起天来也不用动用fe假惺惺附和彼此。entp-a开启话唠模式,intp会耐心分析找出观点漏洞。intp怀疑人生时企图找entp-a抒发郁闷,entp-a听完intp的吐槽,嘿嘿一笑,觉得intp的吐槽有理有据,干脆一起怀疑人生。这两种人格就算互相口头diss也不会去否认彼此,不会产生太大矛盾。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/xing/2316123.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-12-08
下一篇2023-12-08

发表评论

登录后才能评论

评论列表(0条)

    保存