C语言怎么编写:请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么编写:请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。相关的知识,希望对你有一定的参考价值。

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char
*pInputStr, long lInputLen, char *pOutputStr);

【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响。

结果出来了,你看看吧,满意请采纳

#include <stdio.h>
#include <string.h>
void finddd(char x[]);

int main()

    char a[150];
    char *aa;
    int a1;
    int i;

        printf("请输入任意的字符串: ");
        gets(a);
        finddd(a);
    return 0;


void finddd(char x[])       // 不带数据返回 

int  i,shu=0;
char aa[100];               
int  aaa[200]=0;

for(i=0;i<strlen(x);i++)

     if(aaa[ x[i] ] == 0)
    
aaa[ x[i] ] = 1;
         aa[shu++]=x[i];
    

   aa[shu++]='\\0';

   printf("剔除重复字符后的字符串: %s\\n",aa);

追问

不好意思,楼上的回复的比你早,财富值被他领走了

参考技术A main()

char x[100],y[100];
void stringFilter(const char*pInputStr, long lInputLen, char *pOutputStr);
gets(x);
stringFilter(x,strlen(x),y);
puts(y);

//算法说明:将源字符串中每一个字符取出来,到目标字符串中查找存不存在,如果已经存在,则跳过,否则,复制到目标字符串最后一个字符的后面。
void stringFilter(const char*pInputStr, long lInputLen, char *pOutputStr)

long i,j,n;
for(i=0;i<100;i++)pOutputStr[i]=0;//将pOutputStr字符串各元素清0
for(i=0;i<lInputLen;i++)

n=strlen(pOutputStr);//求pOutputStr字符串长度
for(j=0;j<n;j++)
if(pOutputStr[j]==pInputStr[i])break;//如果从pInputStr字符串中取出的第i个字符在pOutputStr字符串中已经存在
if(pOutputStr[j]==0)pOutputStr[j]=pInputStr[i];

参考技术B void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)

int i, j, k;

i = 0;
j = 0;
k = 1;
*pOutputStr = *pInputStr;
while (pInputStr[i])

for (j = 0; j < k; ++ j)

if (*(pOutputStr + j) == *(pInputStr + i))

break;


if (j == k)

*(pOutputStr + k) = *(pInputStr + i);
++ k;

++ i;

*(pOutputStr + k) = 0;

追问

剩下的呢

追答

来个完整的:

#include <stdio.h>
#include <string.h>

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)

int i, j, k;

i = 0;
j = 0;
k = 1;
*pOutputStr = *pInputStr;
while (pInputStr[i])

for (j = 0; j < k; ++ j)

if (*(pOutputStr + j) == *(pInputStr + i))

break;


if (j == k)

*(pOutputStr + k) = *(pInputStr + i);
++ k;

++ i;

*(pOutputStr + k) = 0;


int main()

char buf1[20] = 0;
char buf2[20] = 0;
printf("请输入字符串:\\n");
scanf("%s", buf1);
stringFilter(buf1, strlen(buf1), buf2);
printf("%s\\n", buf2);
return 0;

本回答被提问者和网友采纳

C语言试题五十之请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。

1、 题目

请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。 

 

 

 

 

 

 

 

 

 

 

 

 

2 、温馨提示

      C语言试题汇总里可用于计算机二级C语言笔试、机试、研究生复试中C程序设计科目、帮助C语言学者打好程序基础、C语言基础,锻炼您的逻辑思维和解决问题的能力,帮助你成为C语言笔试、机试解题高手,帮助你拿到C语言工作的offer每一个题目都附带源代码和运行结果,让你不再有任何困惑,妈妈再也不担心我的C语言了。如果程序有任何看不懂或者哪个步骤不理解的地方都可以加我微信(15874274916)私聊我,或者有更好的思路解决办法都可以加我微私聊,一起探讨、希望可以正真的帮助到你,同时也可以扫下面的二维码关注我微信公众号,比如你还对生活、美食或者其它方面都感兴趣,都可以加微信交流,博主擅长讲解计算机相关方面的知识、如果大家对计算机方向、前端、移动端、服务端、数据结构、算法、网络、高数等等一些列方向比较迷茫或者不知道要学哪些?或者具体怎么学?或者其它方向有任何困惑都可以找我交流,谢谢大家关注。

 

 

 

 

以上是关于C语言怎么编写:请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题五十之请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。

C语言试题五十之请编写一个函数void function(char *ss),其功能时:将字符串ss中所有下标为奇数位置上的字母转换为大写(若位置上不是字母,则不转换)。

C语言编写字符替换程序。

请帮忙用C语言编写一个函数~~~功能是“文件复制”~~~谢谢~~

C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。

C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。