C_数组:元素偏移,元素插入,元素删除
来源:互联网 发布:java虚拟机内存模型 编辑:程序博客网 时间:2024/05/21 19:32
先来一个简单的:
假如有数组:a[10] = {11,22,33,44,55,66,77,88,99},
现在需要插入一个元素70
要求插入以后的造型为:a[10] = {11,22,33,44,55,66,70,77,88,99},
分析:
1,从定义是的造型就可以知道,末尾留了一个位置,默认为0的元素,没写出来。
2,实际上是要把比插入元素值大的元素整体后移一位,腾出一个位置。
那么此时有两种挪法:
方法一:从第一个开始动。
void main(){ int a[10] = {11,22,33,44,55,66,77,88,99},insert_num = 70,i,j,temp; for(i=0;i<10;i++) { if(insert_num <= a[i]) { temp = a[i]; a[i] = insert_num; for(j = i+1;j<10;j++) { temp = temp^a[j]; a[j] = temp^a[j]; temp = temp^a[j]; } break; } } for(i=0;i<10;i++) { printf("%5d",a[i]); } getchar();}
方法二:从最后一个开始动
int main(){ int a[10] = {11,22,33,44,55,66,77,88,99}; int key = 0,i = 0,j = 0,t = 0; scanf("%d",&key); getchar(); for(i = 0;i<10;i++) { if(a[i]>key) { for(j = 9;j>i;j--) { a[j] = a[j-1]; } a[i] = key; break; } } for(i = 0;i<10;i++) { printf("\na[%d] = %d",i,a[i]); } getchar(); return 0;}
去掉字符中的数字
void main(){ srand((unsigned)time(NULL)); char ch[13] = "\0", i, j,num; for (i = 0; i < 12; i++) { num = 1 + rand() % 100; ch[i] = (num <= 50) ? ('a' + rand() % 26) : ('0' + rand() % 10); } printf("原始口令为:\t%s",ch); for (i = 0; i < 12; i++) { if (ch[i] >= '0' && ch[i] <= '9') { for (j = i; j < 13; j++) { ch[j] = ch[j + 1]; } i--; //移动以后,还要继续检测当前位置,确保移过来的也是非数字字符 } } printf("\n\n删除数字后的口令为:\t%s", ch); getchar();}
字符串中的数字之前插入美元符
void find_num(char a[], int len, int start);void add_dolar(char a[], int len, int key);void add_dolar(char a[], int len, int key){ int i; for (i = len; i > key; i--) { a[i] = a[i - 1]; //从数字字符开始(包括数字字符),把自己的值复制给后一位,完成整体后移。 } a[key] = '$'; //此时原来的数字位就腾出来了,将它赋值为‘$’ if (key + 2 != strlen(a)) //此时原来的数字的下标变为了key+1,再加1以后对比此时数组中非空字符的总数,判断它是不是末位 { find_num(a, strlen(a), key + 2); //如果不是,就要从该数字的下一位开始,继续查找后面的数字。 }}void find_num(char a[], int len, int start) //数组,非空字符的个数,检查的起点下标{ int i; for (i = start; i < len; i++) { if (a[i] >= '0'&& a[i] <= '9' && a[i - 1] != '$') //只有遇到数字,并且数字前面没有加美元符的情况下,才处理 { add_dolar(a, strlen(a), i); //找到以后将字符数组,非空字符的个数,数字对应的下标传过去 break; //因为处理过后的字符串长度发生了改变,所以循环先退出。 } }}int main(){ srand((unsigned)time(NULL)); char ch[50] = { '\0' }; int i, k; while (1) { for (i = 0; i < 50; i++) { ch[i] = '\0'; //字符数组清空,用于循环演示 } for (i = 0; i < 12; i++) { k = rand() % 101 + 1; //定义一个1-100的随机数,用于概率分配 if (k <= 30) //大写字母出现概率为30% { ch[i] = 'A' + rand() % 26; } else if (k >= 30 && k <= 70) //数字出现概率为40% { ch[i] = '0' + rand() % 10; } else //小写出现概率为40% { ch[i] = 'a' + rand() % 26; } } printf("\n原始口令:%s\n", ch); find_num(ch, strlen(ch), 0); printf("\n升级口令:%s\n", ch); getchar(); } system("pause"); return 0;}
将数组元素循环往后移动10位
/*定义一个数组a[50],1-100随机赋值,然后将所有元素往后移动10位(如果到了最后一位就移动到第一位,首尾相接的移动方式)*/void main(){ int a[50], i = 0, j = 0, k, temp; printf("\n偏移前:\n"); for (i = 0; i < 50; i++) { a[i] = 1 + rand() % 100; printf("%-5d", a[i]); (i % 10 == 9) ? printf("\n") : NULL; } for (j = 0; j < 10; j++) { temp = a[0]; for (i = 0; i < 49; i++) { temp = temp^a[i + 1]; a[i + 1] = temp^a[i + 1]; //从前往后挪 temp = temp^a[i + 1]; } a[0] = temp; } printf("\n偏移后:\n"); for (i = 0; i < 50; i++) { printf("%-5d", a[i]); (i % 10 == 9) ? printf("\n") : NULL; } getchar();}
阅读全文
0 0
- C_数组:元素偏移,元素插入,元素删除
- 数组任意位置插入元素,删除特定元素
- js中数组插入、删除元素操作
- 数组元素的插入和删除
- python插入,删除元素
- 有序数组 插入元素
- 数组元素的插入
- 数组-插入元素
- 删除数组元素.
- js 删除数组元素。
- JS删除数组元素
- js数组删除元素
- PHP删除数组元素
- VBS 删除数组元素
- js删除数组元素
- JS删除数组元素
- JS删除数组元素
- PHP数组删除元素
- HDFS balancer实践
- Leetcode 448 Find All Numbers Disappeared in an Array
- ping指定数据包大小
- HBase Full GC宕机
- hadoop balancer hbase balancer
- C_数组:元素偏移,元素插入,元素删除
- Java记录 -41- IDE开发工具
- Eclipse使用设置(持续更新中)
- Eclipse常用快捷键
- POJ 2507 Crossed ladders 笔记
- linux hosts的allow和deny
- ssh_exchange_identification: Connection closed by remote hos
- Leetcode 520 Detect Capital
- 找出数组中重复的数字