#include <stdio.h>
#include <stdlib.h>
void del(int *a, int size) {
int *temp = (int*)malloc(size * sizeof(int)); // 临时数组,用于存储去重后的结果
int pre = 0;
int rear = 1;
int j = 0;
// 第一个元素肯定是要保留的
temp[j++] = a[pre];
// 遍历数组
while (rear < size) {
if (a[pre] != a[rear]) { // 如果当前元素和前一个元素不同
temp[j++] = a[rear]; // 保存不重复的元素
pre = rear; // 更新前指针
}
rear++; // 后指针继续前进
}
// 输出去重后的数组
printf("去重后的数组: ");
for (int i = 0; i < j; i++) {
printf("%d ", temp[i]);
}
printf("\n");
free(temp); // 释放动态分配的内存
}
int main() {
int a[] = {1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8, 9, 9, 9};
int size = sizeof(a) / sizeof(a[0]); // 计算数组大小
del(a, size); // 调用函数删除重复元素
return 0;
}
6.移动字符串中的内容
cpp复制代码
#include <stdio.h>
void moveBack(int m, char *p)
{
char temp[24]; // 临时数组用于保存前 m 个字符
int n = 0; // 用于计算字符串长度
// 手动计算字符串长度
while (p[n] != '\0') {
n++;
}
if (m > n) m = n; // 确保 m 不会大于字符串的长度
// 复制前 m 个字符到 temp 中
for (int i = 0; i < m; ++i) {
temp[i] = p[i];
}
// 将后面的字符向前移动
for (int i = m; i < n; ++i) {
p[i - m] = p[i];
}
// 将 temp 中的前 m 个字符放到末尾
for (int i = 0; i < m; ++i) {
p[n - m + i] = temp[i];
}
// 重新设置字符串的结尾
p[n] = '\0';
}
int main() {
char str[] = "world hello ";
printf("前:%s\n", str);
moveBack(6, str);
printf("后:%s\n", str);
return 0;
}
7.无符号整数去掉最高位
cpp复制代码
#include <stdio.h>
unsigned int fun(unsigned int a)
{
int b=1;
int temp = a;
while (temp/10>=10)
{
b *= 10;
temp /= 10;
}
b=b *10;
a=a%b;
return a;
}
int main() {
printf("%d", fun(7894));
return 0;
}
8.打印下三角
cpp复制代码
#include <stdio.h>
void xiasanjiao(int a[4][4])
{
for (int i=0;i<4;++i)
{
for (int j=0; j <=i ; ++j)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[4][4] = {
8,0,0,0,
8,8,0,0,
8,8,8,0,
8,8,8,8
};
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j <4; ++j)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("下三角:\n");
xiasanjiao(a);
return 0;
}
9.移动数组中的内容
cpp复制代码
#include <stdio.h>
void moveBack(int a[10], int m) {
int b[10] = { 0 };
// 复制前 m 个元素到 b
for (int i = 0; i < m; ++i) {
b[i] = a[i];
}
// 将后面的元素向前移动 m 位
for (int i = m; i < 10; ++i) {
a[i - m] = a[i];
}
// 将 b 中的元素放到数组的后 m 位
for (int i = 0; i < m; ++i) {
a[10 - m + i] = b[i];
}
}
int main() {
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
moveBack(a, 3);
for (int i = 0; i < 10; ++i) {
printf("%d ", a[i]);
}
return 0;
}
10.删除字符串中的空格
cpp复制代码
#include <stdio.h>
void delSpace(char* a) {
char* original = a; // 保存原始字符串指针
char* result = a; // 用于存储处理后的结果
// 遍历原始字符串
while (*a != '\0') {
if (*a != ' ' && *a != '\t') { // 只复制非空格和非制表符字符
*result++ = *a; // 复制字符到结果字符串
}
a++;
}
*result = '\0'; // 添加字符串结束符
}
int main() {
char a[] = "h iph o p";
delSpace(a);
printf("%s\n", a); // 打印处理后的字符串
return 0;
}