dele函数的功能:对给定的字符串,去掉重复的字符与字符串中的空格后,按照字符ASCII码顺序从小到大排序后输出。
函数接口定义:
void dele(char arr[]);
裁判测试程序样例:
#include<stdio.h>
#include"string.h"
void dele(char arr[]);
int main(void)
{
char strA[81];
gets(strA);
dele(strA);
puts(strA);
return 0;
}/* 请在这里填写答案 */
输入样例:
abcd efg abc fH 3 2 1
输出样例:
123Habcdefg
解析:
对于这道题,只需要先一步一步完成其要求即可,我采用的是先去除空格字符,再对其排序,
最后再去除重复字符即可,去除字符只需简单的数组移动即可实现。
答案
#include <string.h>//由于系统没有给这个头文件,那我们自己加一个也无伤大雅。
void dele(char arr[])
{
//这题可分为三个步骤完成。先去掉重复的空格,在排序,再去掉重复的字符。
int i,j;
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]==' ')
{
for(j=i;arr[j]!='\0';j++)
arr[j]=arr[j+1];
i--; //想想这个步骤是为什么,下面也还会有相同的操作哦
}
}
//已经去掉空格字符了,接下来实现排序。
char ch;
int n=strlen(arr);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
ch=arr[j];
arr[j]=arr[j+1];
arr[j+1]=ch;
}
}
}
//最后,实现重复的字符删除工作,
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]==arr[i+1])
{
for(j=i;arr[j]!='\0';j++)
arr[j]=arr[j+1];
i--; //想想这个步骤是为什么,当出现aaaa时,这个步骤就起作用了!
}
}
}
啦啦啦,今天有人提醒我还有一种超级简单的方法:
void dele(char arr[])
{
int s[128]={0},j;
char sz;
int m;
for(int i=0;arr[i]!='\0';i++)
{
m=(int)arr[i];
m=m-48;
if(s[m]==0)
{
s[m]=1;
}
}
j=0;
for(int i=0;i<128;i++)
{
if(s[i]==1&&i!=32)
{
sz=i+'0';
arr[j]=sz;
j++;
}
}
arr[j]='\0';
}