C语言问题 把一个数组中的重复元素去掉
int main()
{
int a[10],i,j,m=0;
printf("输入数组:\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<=9;i++)
{
for(j=i+1;j<=9;)
{
if(a[j]==a[i])
{
for(;j<=8;j++)
{
a[j]=a[j+1];
}
m++;
j=i+1;
}
else
j++;
}
}
for(i=0;i<=9-m;i++)
{
printf("%d",a[i]);
}
return 0;
}
求改! 展开
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
去掉字符串中重复的字符并排序
int main()
{
string input;
while (cin>>input)
{
int count = 0; // 统计有多少个空格
for (int i = 0; i < input.size(); i++)
{
for (int j = i+1; j < input.size(); j++)
{
if (input[i] == ' ')
break;
if (input[i] == input[j])
{
input[j] = ' ';
count++;
}
}
}
int newsize = input.size() - count;
string str(newsize,'0'); //创建一个长为newsize,用‘0’填充的字符串
int j = 0;
for (int i = 0; i < input.size(); i++)
{
if (input[i] != ' ')
{
str[j] = input[i];
j++;
}
}
sort(str.begin(), str.end());
cout << str<<endl;
}
}
扩展资料:
while语句若一直满足条件,则会不断的重复下去。但有时,需要停止循环,则可以用下面的三种方式:
一、在while语句中设定条件语句,条件不满足,则循环自动停止。
如:只输出3的倍数的循环;可以设置范围为:0到20。
二、在循环结构中加入流程控制语句,可以使用户退出循环。
1、break流程控制:强制中断该运行区内的语句,跳出该运行区,继续运行区域外的语句。
2、continue流程控制:也是中断循环内的运行操作,并且从头开始运行。
推荐于2017-10-15 · 知道合伙人软件行家
先排序,在进行遍历比较。
#include <stdio.h>
// 升序数组src
void sort(int *src, int len)
{
int tem;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len - i - 1; j++)
if (src[j] > src[j+1])
{
tem = src[j];
src[j] = src[j+1];
src[j+1] = tem;
}
}
}
int main()
{
int num[10] = {0, 2, 5, 1, 1, 5, 4, 9, 2, 1}, d;
int i = 0, cnt;
sort(num, 10); // 排序
d = num[0];
for (i = 1; i < 10; i++) // 遍历比较
{
if (num[i] != d)
{
printf("%d ", d);
d = num[i];
}
}
if (num[9] == d)
printf("%d\n", d);
return 0;
}
基本思路
先将数组排序
拷贝数组去重
#include <stdlib.h>
int a[] = {56,12,88,88,23,209,11,11,11,33,33,54,0,-3,7,3};
int b[16];
int less(void *a, void *b)
{
return *((int *)(a))-*((int *)(b));
}
int unique(int * input, const int size_input, int * ans)
{
int size_ans = 0;
int ii = 0;
if (size_input <= 0||input==0||ans==0){ return 0; }
qsort(a,size_input,sizeof(int),less);
ans[size_ans] = input[0];
for (; ii<size_input;++ii)
{
if (ans[size_ans] != input[ii])
{
++size_ans;
ans[size_ans] = input[ii];
}
}
return size_ans + 1;
}
int main()
{
int size=unique(a,16,b);
}
int main()
{
int a[10],i,j,m=0;
printf("输入数组:\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9-m;i++)//i<=9---->i<9-m
{
for(j=i+1;j<=9-m;)//j<=9---->j<=9-m
{
if(a[j]==a[i])
{
for(;j<=8-m;j++)//j<=8----j<=8-m
{
a[j]=a[j+1];
}
m++;
j=i+1;
}
else
j++;
}
}
for(i=0;i<=9-m;i++)
{
printf("%d ",a[i]);
}
return 0;
}
其实就是改了下循环条件而已(既然下面的循环都用了m了,为什么上面不用呢)