(C语言)输入一串字符,按从小到大顺序排列并删除重复项。

作者&投稿:葛成 (若有异议请与网页底部的电邮联系)
C语言删除重复项~

/*
排序前:
2 6 5 1 1 9 7 6 6 6
排序后:
9 7 6 6 6 6 5 2 1 1
删除相同元素后:
9 7 6 5 2 1
Press any key to continue
*/
#include #include #include int const N = 10;void Sort(int a[], int n) {int i,j,k,t;for(i = 0; i < n - 1; ++i) {k = i;for(j = i + 1; j < n; ++j) {if(a[k] < a[j]) k = j;}if(i != k) {t = a[i];a[i] = a[k];a[k] = t;}}}int DelSame(int a[], int n) {int i,j,k;for(i = 0; i < n - 1; ++i) {for(j = i + 1; j < n; ++j) {if(a[i] == a[j]) {for(k = j; k < n - 1; ++k)a[k] = a[k + 1];--n;--j;}}}return n;}void Show(int a[], int n) {int i;for(i = 0; i < n; ++i)printf("%d ",a[i]);printf("
");}int main() {int a[10],i,n;srand(time(0));for(i = 0; i < N; i++)a[i] = rand()%10;printf("排序前:
");Show(a,N);Sort(a,N);printf("排序后:
");Show(a,N);n = DelSame(a,N);printf("删除相同元素后:
");Show(a,n);return 0;}

那还是排列问题,把比较的条件设置成>= 或是 <= ,使用基本排序方法仍然可以排序

#include<stdio.h>
#include"string.h"
int main(void)
{
char str1[500]={0},str2[256]={0};//定义二个数组,并赋初值为0
int i;
gets(str1);//读取一个字符串
for(i=0;str1[i];i++)
{
str2[str1[i]]=1;//str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符
}
for(i=0;i!=256;i++)
if(str2[i]==1)//判断数组中被str1填充的位置,填充的是非0值,没填充的是0值
printf("%c",i);//输出str2的下标值,对应str1中的字符值
putchar('
');
return 0;
}


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

void sort(char s[]) { // 选择排序
int i,j,k,t,len = strlen(s);
for(i = 0; i < len - 1; ++i) {
k = i;
for(j = i + 1; j < len; ++j) {
if(s[k] < s[j]) k  =j;
}
if(i != k) {
t = s[i];
s[i] = s[k];
s[k] = t;
}
}
}

// 将不重复的字符复制到t[],返回删除的字符个数
int change(char s[], char t[]) {
int i = 1,j = 0,cnt = 0;
sort(s);
t[0] = s[0];
while(s[i]) {
if(s[i] == s[i - 1]) ++cnt;
else t[++j] = s[i];
++i;
}
t[j] = '\0';
return cnt;
}

int main() {
char s[] = "aseqkwh  wkqhasweewwqbkh112504ffvsdr";
char t[60];
printf("原串:%s
",s);
printf("共删除%d个字符。
",change(s,t));
printf("最后得到的字符串为:%s
",t);
return 0;
}


冒泡排序就可以


C语言:输入一串字符,输出所有数字及数字的个数,并求出所有输入数字之和...
include<stdio.h>#include<string.h>void main(){char s[50];int i,count1=0,count2=0,sum=0;for(i=0;scanf("%c",&s[i])&&s[i]!='\\n';i++,count1++);printf("所有数字:");for(i=0;i<count1;i++){if(s[i]>='0'&&s[i]<='9'){sum+=s[i]-'0';printf("%-...

怎样用C语言编程“输入一串字符,直到输入*为止,求其中字母和数字的个...
include<stdio.h> include<string.h> int amin(){ char c;int m = 0,n = 0;while(scanf("%c",&c) == 1 && c != '*') { if(c>='0' && c <= '9') n ++;else if(c >= 'a' && c <= 'z' || c >= 'A' && c<= 'Z') m ++;else ;} printf("%d %d\\n...

C语言输入一串字符(可包含空格),统计各字母出现的次数(不区分大小写...
char st[10000];char *s=st;gets(s);while(*s){ if(*s>96&&*s<123){ s-=32;suma++;} if(*s>47&&*s<58){ sum0++;} a[*s]++;s++;} printf("总字母数:%d\\n",suma);printf("总数字数:%d\\n",sum0);for(int i=65;i<91;i++)if(a[i])printf(" %c 的个数:%d\\...

c语言如何输入数字和单个字符串
二、输入单个字符。输入单个字符可以用以下两种函数。定义char c;1 scanf("%c", &c);这种方法和输入数字是类似的,%c仅读入一个字符,并赋值给c。2 c = getchar();getchar函数的功能就是读入一个字符,并以返回值形式返回。三、输入一串字符(以空白字符分隔)。可以用scanf的%s格式。char str[...

C语言编程:从键盘输入一串字符(长度不超过80),统计出各字母出现的次数...
++;n++;\/*出现的字符的种类数加1*\/ } } for(i=0;i<n;i++)\/*输出*\/ printf("\\'%c\\'出现了%d次\\n",ch[i],num[i]);} main(){ int i=0;char s[MAX];printf("请输入一个字符串:");while((s[i]=getchar())!='\\n')\/*输入*\/ i++;s[i]='\\0';detect(s);} ...

c语言 输入一串字符里面有数字,字母,空格以及其它符号,判断各类符号...
else if(c==' ')counter[2]++;else counter[3]++;} return 0;} int main(){ char str[N],c;char *tou[]={"数字","字母","空格","其它"};int i=0;int counter[4]={0};\/\/数字,字母,空格以及其它符号的数量 printf("输入字符串:");while((c=getchar())!='\\n')str[i+...

C语言编程题 4.编程实现:由用户从键盘输入一串字符(以回车键结束),统 ...
include<stdio.h>#include<stdlib.h>int main(){ char a[128]; gets(a); int i=0; int c1,c2,c3,c4; c1=c2=c3=c4=0; while(a[i++]) { if(a[i]>='A'&& a[i]<='Z') c1++; else if(a[i]>='a'&& a[i]<='z') c2++; else if...

用C语言编写程序 输入一串字符或句子,以回车结束,
void main(void){ char szBuffer[1024];memset(szBuffer, 0x00, 0);scanf("%s", szBuffer);int charCount = 0;int numCount = 0;int blankCount = 0;for(int i=0l i<strlen(szBuffer); i++){ if((szBuffer[i] >= 'a' && szBuffer[i] <= 'z') || (szBuffer[i] ...

[C语言]随意输入一串字符,统计出里面元音字母的个数
:case 'o': case 'O':case 'u': case 'U': num[0]++; break;default: num[1]++; break;} str ++;} return;} main(){ int num[2],i;char str[256];gets(str);fun(str, num, 2);printf("元音数是:%d 辅音数是:%d\\n",num[0],num[1]);} 本程序适于扩展,并且高效。

请问在c语言中输入一串字符串(字符串长度不定,随意输入),赋值到数组...
include "stdio.h"int main(){ char str[100];char c;int i,j;bool b=true;while (b){ for(i=0;i<100;i++){\/\/输入 c=getchar();if(c=='\\n') {str[i]='\\0';break;} str[i]=c;} for(j=0;j='0'&&str[j]<='9') {printf("包含数字,请重新输入。\\n\\n");break...

鄄城县13112437531: 用c语言从键盘输入一串字符字母,按从小到大的顺序输出 -
策虏易齐: 一个排序就搞定了啊!如果不想自己写排序,可以用qsort.1234567891011121314151617181920 #include <stdio.h>#include <stdlib.h>#include <string.h>#define LINELEN 1024 intcmp(constvoid*p1, constvoid*p2) { return*((char*)p1) - *((char*)...

鄄城县13112437531: C语言中字符串从小到大排序 -
策虏易齐: #include <stdio.h> #include <string.h> void f(char *str) {char *p,*q,*r,c; /*--用选择排序法对字符串str中字符按从小到大排序.找出以下程序段中的错误--*/for(p=str;*p;p++){for(r=p,q=p+1;*q;q++)if(*r>*q)//应该加*号,不加*号的比较大小是没...

鄄城县13112437531: 【C语言】写一个函数,用选择法对输入的一行字符按照由小到大的顺序排列. -
策虏易齐: #includevoid main() {printf(" 请输入字符串:\n"); char szBuf[512] = {0}; for (int i = 0; i {for (int j = i + 1; j {if (szBuf[j] > szBuf[j+1]){char tmp = szBuf[j];szBuf[j] = szBuf[j+1];szBuf[j+1] = tmp;}}} printf("排序后的字符串:%s\n", szBuf); }

鄄城县13112437531: C语言(1)输入1个字符串,对该字符串按字符大小从小到大的顺序排序,然后输出这个已经排好序的字符串. -
策虏易齐: #include<stdio.h> int main( ) {char s[100],*p,*p1,*p2,c;gets(s); //读取字符串for(p=s;*p;p++); //求得串长,p指向'\0'p--; //冒泡排序外循环终点for(p1=s;p1<p;p1++,p--) //此二重循环为冒泡排序for(p2=s;p2<p;p2++)if(*p2>*(p2+1)){c=*p2;...

鄄城县13112437531: C语言程序:题目:从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的字符.答案如下 -
策虏易齐: #include#include"string.h" int main(void) { char str1[500]={0},str2[256]={0};//定义二个数组,并赋初值为0 int i; gets(str1);//读取一个字符串 for(i=0;str1[i];i++) { str2[str1[i]]=1;//str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,...

鄄城县13112437531: 用C语言编写一个程序:从键盘上输入三个字符,从小到大输出 -
策虏易齐: #include "stdafx.h" void Compare(char a,char b,char c) {char max,min;max = a>b?a:b;//求出a和b中的最大值min = a<b?a:b;//求出a和b中的最小值if(c>=max) //判断c是不是最大值{printf("最大的字符为:%c\n",c);printf("中间...

鄄城县13112437531: 用C语言编程:输入一行文字,将其中的每个字符按从小到大的顺序排列后输出 -
策虏易齐: //用的是qsort快排. #include#include #include int comp(void const *a,void const*b) { return *(char*)a-*(char*)b; } int main() { char str[100]; gets(str); qsort(str,strlen(str),sizeof(str[0]),comp); puts(str); }

鄄城县13112437531: c语言编程题:输入n个字符串,按有小到大顺序输出. -
策虏易齐: #include#include int main(){ int i,k,t; char tem[1000],a[10][1000]; //声明字符串二维数组 和交换用的中间数组 for(i=0;i scanf("%s",a[i]); for(i=0;i for(k=i;k if(strcmp(a[i],a[k])==1){ //利用strcmp函数比较俩个字符串的大小 a>b 值为1 a strcpy(tem,a[i]); ...

鄄城县13112437531: 用c编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字 -
策虏易齐: #include int main() {char s[100],c='a';int i;gets(s);for(;c<='z';c++){for(i=0;i<100;i++){if(c==s[i]){printf("%c",c);break;}}}printf("\n");return 0; } 这样就行了 我表示你的break;由于没加括号 他会使其退出第一层循环 所以有错 加一对花括弧就行了 你试试

鄄城县13112437531: C语言中从键盘上输入五个字符串,按从小到大的顺序对它们进行排序!!(TC2.0) -
策虏易齐: 抱歉,是我疏忽了!呵呵! 下面还是举例来说明:去掉else后的问题在到底在哪里,为什么结果不对了.依旧a[0]="12345",a[1]="12452"; 前两个相等故不做if.第三四个a[1]值大,此处就本应该结束循环不再比较了,但是由于去掉了else...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网