无冗余输出一个字符串,对于不是首次出现的字符,对其进行过滤。如abcdacdef,过滤后为abcdef。对于字符0-9,a-f,A-F,将其对应的ASCII码低4位进行对调,例如将1101转换为1011,并将对应的ASCII码的字符进行输出,若为字母,转换为大写。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int search(char s,char s1[])
{
int b=strlen(s1);
int a=1;
for(int i=0;i<b;i++)
{
if(s1[i]==s)
a=0;
}
return a;
}
int change(int k)
{
int n[8];
for(int i=0;i<4;i++)
{
n[4+i]=k%2;
k=k/2;
}
for(int i=0;i<4;i++)
{
n[3-i]=k%2;
k=k/2;
}
int m=0;
for(int j=0;j<8;j++)
m=m*2+n[j];
return m;
}
int main()
{
char s[233];
gets(s);
char s1[233]={'\0'};
int a=strlen(s);
int j=0;
int m;
for(int i=0;i<a;i++)
{
if(search(s[i],s1)==1)
{
s1[j]=s[i];
j++;
}
}
int length=strlen(s1);
for(int i=0;i<length;i++)
{
if(s1[i]>='0'&&s1[i]<='9')
{
char c=s1[i];
int n=s1[i]-'0'+0x31;
m=change(n);
s1[i]=m-'0'+'0';
}
else if(s1[i]>='A'&&s1[i]<='F')
{
char c=s1[i];
int n=s1[i]-'A'+0x41;
m=change(n);
s1[i]=m-'A'+'A';
}
else if(s1[i]>='a'&&s1[i]<='f')
{
char c=s1[i];
int n=s1[i]-'a'+0x61;
m=change(n);
s1[i]=m-'a'+'A';
}
}
printf("%s",s1);
}