c语言经典100例

1.字符串转为数字

cpp 复制代码
#include <stdio.h>

int strToInt(char *s)
{
	int num=0;
	int sign=1;
	int step=1;
	if (*s == '-')
	{
		sign = -1;
		s++;
	}
	while (*s >= '0'&&*s <= '9')
	{
		num = num*10+(*s-'0');
		step += 10;
		s++;
	}
	
	return num*sign;
}

int main()
{
	char a[10] = "-1234";
	char *s =a ;
	printf("字符型:%s,整形:%d",s,strToInt(s));


	return 0;
}

2.二维字符数组转一维数组

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char a[3][3] = { 'w','w','w','a','a','a','l','l','l'};
	char n[10] = "";
	for (int i = 0,m=0; i < 3; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			printf("%c",a[i][j]);
			n[m] = a[i][j];
			m++;
		}
		printf("\n");
	}
	n[9] = '\0';
	printf("%s\n",n);

	return 0;
}

3.数字转换为字符串

cpp 复制代码
#include <stdio.h>

void intToString(int num, char *str) {
    int i = 0;
    int isNegative = 0;

    // 处理负数
    if (num < 0) {
        isNegative = 1;
        num = -num; // 将负数转为正数
    }

    // 转换整数为字符串
    do {
        str[i++] = (num % 10) + '0'; // 获取当前数字并转换为字符
        num /= 10; // 去掉当前的最后一位数字
    } while (num > 0);

    // 如果是负数,添加负号
    if (isNegative) {
        str[i++] = '-';
    }

    // 添加字符串结束符
    str[i] = '\0';

    // 反转字符串
    for (int j = 0; j < i / 2; j++) {
        char temp = str[j];
        str[j] = str[i - j - 1];
        str[i - j - 1] = temp;
    }
}

int main() {
    int number = -12345; // 示例整数
    char str[20]; // 确保足够大以存放转换结果

    intToString(number, str); // 调用转换函数
    printf("整数转换的字符串为:%s\n", str); // 输出结果

    return 0;
}

4.统计一行字符串中单词的个数

cpp 复制代码
#include <stdio.h>

int main()
{
	char a[] = "hello world   my man!";
	char *pa = a;
	int count = 0;
	int inWord = 0; // 用于跟踪是否在单词内部

	while (*pa != '\0') // 直到字符串的结尾
	{
		if (*pa == ' ' || *pa == '\t' || *pa == '\n') // 如果是空格、制表符或换行符
		{
			inWord = 0; // 不在单词内部
		}
		else
		{
			if (inWord == 0) // 进入一个新单词
			{
				count++;
				inWord = 1; // 现在在单词内部
			}
		}
		pa++; // 移动到下一个字符
	}

	printf("单词的数量为:%d\n", count);

	return 0;
}

5.删除数组中相同的数

cpp 复制代码
#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;
}
相关推荐
小爬虫程序猿几秒前
利用Java爬虫速卖通按关键字搜索AliExpress商品
java·开发语言·爬虫
程序猿-瑞瑞3 分钟前
24 go语言(golang) - gorm框架安装及使用案例详解
开发语言·后端·golang·gorm
qq_433554543 分钟前
C++ 面向对象编程:递增重载
开发语言·c++·算法
易码智能11 分钟前
【EtherCATBasics】- KRTS C++示例精讲(2)
开发语言·c++·kithara·windows 实时套件·krts
一只自律的鸡12 分钟前
C语言项目 天天酷跑(上篇)
c语言·开发语言
程序猿000001号15 分钟前
使用Python的Seaborn库进行数据可视化
开发语言·python·信息可视化
一个不正经的林Sir20 分钟前
C#WPF基础介绍/第一个WPF程序
开发语言·c#·wpf
带多刺的玫瑰24 分钟前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法
API快乐传递者24 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者26 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python