C语言
文章平均质量分 75
Readtears
这个作者很懒,什么都没留下…
展开
-
【C语言】 实现strstr
#include #include char *my_strstr(const char *str1,const char *str2){ assert(str1); assert(str2); char *p = str1; //记录str1的初始位置 char *s1 = p; //保存str1的开始位置 char *s2 = str2; //记录str2的初始位置原创 2016-05-26 12:24:36 · 354 阅读 · 0 评论 -
【C语言】 实现memmove
内存重叠拷贝函数memmove:用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。由src所指内存区域复制count个字节到dest所指内存区域#include#includevoid my_memmo原创 2016-05-26 12:25:05 · 1226 阅读 · 0 评论 -
【C语言】 实现memcpy
memcpy属内存操作函数,实现内存拷贝功能,但其参数类型为void,意思是任意类型都可以,但是在函数内要进行强制类型转换,并且其与strcpy相比多了一个参数size_t count(字节数)memcpy的函数原型是void *memcpy(void *dest, const void *src, size_t n),其功能是从源src所指的内存地址的起始位置开始拷贝count个字节到目标de原创 2016-05-26 12:25:03 · 332 阅读 · 0 评论 -
【C语言】 冒泡排序子例
调整数组使奇数全部都位于偶数前面实现以下功能:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分代码实现:#includevoid swap(int *a,int *b){ int t = *a; *a = *b; *b = t;}int adjust_num(int arr[],int n){原创 2016-05-26 12:25:00 · 293 阅读 · 0 评论 -
【C语言】 冒泡排序
#include int main(){ int arr[9] = {1,5,2,7,6,3,8,9,4}; int i = 0; int j = 0; int tmp; int len=sizeof (arr)/sizeof(arr[0]); for(j=0;j<len-1;j++) //控制循环的次数 { for(i=0;i<len-1-j;i++) //控制数组的原创 2016-05-26 12:24:57 · 345 阅读 · 0 评论 -
【C语言】 实现strcmp
#include #include int my_strcmp(const char * str1, const char * str2) { assert(str1); assert(str2); while ((*str1 == *str2) && *str1 && *str2) { str1++; str2++; //while (!(*str1 && *原创 2016-05-26 12:24:54 · 1267 阅读 · 0 评论 -
【C语言】 实现strncat
#include #include char *my_strncat(char *strDest,const char *strSrc,int i){ char *start = strDest; //为了将这个函数的返回值作为其他函数的参数,即链式访问 assert((strDest != NULL) && (strSrc != NULL)); while(*strDest++)原创 2016-05-26 12:24:51 · 480 阅读 · 1 评论 -
【C语言】实现strcat
Strcat函数原型如下:char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{ char * address = strDest; //该语句若放在assert之后,编译出错 assert((strDest != NULL) && (strScr !=原创 2016-05-26 12:24:48 · 377 阅读 · 0 评论 -
【C语言】 实现strcpy
一般方法:#include#includechar my_strcpy(char *dest,const char *src){ assert(dest); assert(src); while(*src) { *dest = *src; dest++; src++; } dest = '\0';}int main(){ char dest[10]={原创 2016-05-26 12:24:45 · 287 阅读 · 0 评论 -
【C语言】 实现strlen
#include #include //方法一:使用指针int my_strlen(const char *str){ assert(str); int count = 0; while (*str++) { count++; } return count;}int main(){ char *str = "abcdef"; int len = my_st原创 2016-05-26 12:24:42 · 328 阅读 · 0 评论 -
【C语言】 递归求非负数的每一位之和
#includeint DigitSum(unsigned int n) { int num = 0; if( n == 0) { return num; } else num = n%10; n /= 10; return num + DigitSum(n);}int main(){ unsigned int n = 0; int ret原创 2016-05-26 12:24:39 · 863 阅读 · 0 评论 -
【C语言】 字符串逆序
字符串逆序有多种办法,下面我们分方法而论:// 非递归实现字符串反转:char *reverse(char *str) { if( !str ) { return NULL;} int len = strlen(str); int i,j; char temp; for( i = 0,j=len-1; i<j原创 2016-05-26 12:24:33 · 718 阅读 · 0 评论 -
【C语言】 实现memcmp
内存比较函数memcmp:比较内存区域buf1和buf2的前count个字节,函数原型为int memcmp(const void *buf1, const void *buf2, unsigned int count)#include#includeint *my_memcmp(const void *str1,const void *str2,unsigned int n){原创 2016-05-26 12:25:08 · 710 阅读 · 0 评论 -
【C语言】 实现memset
void *memset(void *s, int ch, size_t n);函数解释:将s中后n个字节(typedef unsigned int size_t)用 ch 替换并返回 s memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。#include#includevoid *my_memset(void *arr,int原创 2016-05-26 12:25:11 · 413 阅读 · 0 评论 -
【C语言】 实现strncpy,strncat,strncmp
//strncpy与strcpy无异,只是拷贝的块大小不一样,strncpy只是向后拷贝n个字节的内容#include#includechar *my_strncpy(char *dest,const char *src,size_t n){ char *ret = dest; assert(dest); assert(src); while(n--) // 用字节数原创 2016-05-26 12:25:14 · 440 阅读 · 0 评论 -
连续子数组最大和
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。直接上代码#include int max原创 2016-09-07 00:28:33 · 1966 阅读 · 0 评论 -
【C语言】 字符串操作函数及内存拷贝函数归总
今天在这里把零散的一些常用的字符串操作函数和内存拷贝函数进行一下归总实现。一 . 字符串操作函数字符串操作函数有很多,这里我列举一些常用的函数,以及自实现的代码:字符串拷贝函数:函数原型:char* my_strcpy(char* dst,const char* src)strcpy():char* my_strcpy(char* dst,const char* src){ assert原创 2016-05-26 12:26:16 · 928 阅读 · 0 评论 -
【C语言】 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到空格认为输入原创 2016-05-26 12:23:12 · 390 阅读 · 0 评论 -
【c语言】 单链表
单链表,顾名思义是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。我们在这里使用C语言实现:.h 文件:#pragma once#include#include typedef int DataType;原创 2016-05-26 12:25:38 · 321 阅读 · 0 评论 -
【C语言】 简易通讯录
我们使用多文件进行编写实现"contact.h"#ifndef __CONTACT_H__#define __CONTACT_H__#define MAX_NAME 20#define MAX_SEX 3#define MAX_TELE 12#define MAX_ADDR 20#define MAX 1000#define INIT_SIZE 100#defin原创 2016-05-26 12:25:35 · 336 阅读 · 0 评论 -
【C语言】 动态开辟二维数组
#include #include int main(){//int arr[3][4];int **arr = (int**)malloc(sizeof(int*) * 3);int i = 0;int j = 0;int k = 1;for(i = 0;i<3;i++){ arr[i] = (int *)malloc(sizeof(int) * 4);// me原创 2016-05-26 12:25:32 · 790 阅读 · 0 评论 -
【C语言】 使用回调函数实现冒泡排序
实现功能:既能排序整型数,也可以排序字符串代码如下:#include #include int int_cmp(const void *p1, const void *p2){ if (*(int *)p1 > *(int *)p2) { return 1; } else if (*(int *)p1 == *(int *)p2) { return 0; }原创 2016-05-26 12:25:29 · 532 阅读 · 0 评论 -
【C语言】 函数指针小谈
指针可以指向变量、数组,也可以指向函数,函数指针就是指向函数的指针函数名实际是程序在内存中的起始地址。而指向函数的指针可以把地址传递给函数也可以从函数返回给指向函数的指针。例如这个例子:通过一个函数求两个数的和并通过函数指针调用该函数。#includeint sum(int a,int b);//求和函数的声明void main(){ int a,b; int (*fun)(i原创 2016-05-26 12:25:26 · 311 阅读 · 0 评论 -
【C语言】 模拟计算器
#include #include int _add(int a, int b){ return a + b;}int _sub(int a, int b){ return a - b;}int _mul(int a, int b){ return a*b;}int _div(int a, int b){ if (b == 0) {原创 2016-05-26 12:25:23 · 3394 阅读 · 0 评论 -
【C语言】 浅谈指针
指针是就是地址,是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。首先,先罗列出几种常见的类型:int p; //这是一个普通的整型变量int *p; //首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,说明指原创 2016-05-26 12:25:20 · 2451 阅读 · 0 评论 -
【C语言】 检测大小端存储
#include int sys_check(){ int i = 1; char *pi = (char *)&i; //强制类型转换为char *,取首字节的内容,用以判断条件 //if (1 == *(char *)&i) if (*pi == 1) { return 1; } else { return 0;原创 2016-05-26 12:25:17 · 499 阅读 · 0 评论 -
【C语言】 二维数组中查找,杨氏矩阵
#include#includeint find_Num(int *arr,int n){ assert(arr); while(*arr <= 9) //必须要判断<=9,否则会溢出 { if(*arr == n) { return 1; } else arr++; } return 0;}int main(){ int n,m,i原创 2016-05-26 12:24:30 · 606 阅读 · 0 评论 -
【C语言】 左旋字符串
实现一个函数,可以左旋字符串中的k个字符方法一:开辟另一个数组,先把第k+1后面的字符写入这个数组中,再把要左旋的k个字符写进去(暴力求解法)实现如下:#include#include#includevoid left_Relvove(char *str,char *arr,int k){ char *pcur = str+k; //先让指针从第k+1个字符开始,存原创 2016-05-26 12:24:27 · 450 阅读 · 0 评论 -
【C语言】 提取子字符串
编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:int substr(char dst[], char src[],int start, int len){}目标是:从 src 数组起始位置向后偏移 start个字符的位置开始,最多复制 len 个非NUL字符到 dst数组。在复制完毕之后,dst 数组必须以NUL字节结尾。函数的返回值是存储于 dst 数组中的字符串的长度原创 2016-05-26 12:24:18 · 4368 阅读 · 0 评论 -
【C语言】模拟三次密码输入
#include#includeint main(){ char arr1[] = "123456"; char arr2[10]; int i = 0; printf("please input the passwd:>"); for (i = 0; i < 3; i++) { scanf("%s",&arr2); if (strcmp(arr1, arr2) ==原创 2016-05-26 12:23:35 · 534 阅读 · 0 评论 -
【C语言】输出字符串
#include#include#includeint main(){ char arr1[] = "###############"; char arr2[] = "welcome to bit!"; int left = 0, right = 0, i = 0,size=0; size = strlen(arr1) ; right = size - 1; // 减一为原创 2016-05-26 12:23:32 · 404 阅读 · 0 评论 -
【C语言】输出一个整数的每一位
#includeint main(){ int n; printf("请输入一个五位整数:"); // 在此输入五位数,若有需要,可更改 scanf("%d",&n); printf("%d %d %d %d %d\n",n/10000,n%10000/1000,n%1000/100,n%100/10,n%10); return 0;}本文出自 “Vs吕小布” 博客,请务必原创 2016-05-26 12:23:29 · 2157 阅读 · 2 评论 -
【C语言】输出菱形星号图案
#includeint main(){ int i,j,k; for(i=0;i<=6;i++) { for(j=0;j<=5-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=5;i++) { for(j=0;j<=i;j++) p原创 2016-05-26 12:23:26 · 35846 阅读 · 1 评论 -
【C语言】接收字符,大小写字符相互转换后输出,数字不输出
#include#includevoid main(){ int ch; while((ch=getchar()) != EOF) if(ch>=65 && ch<=95) { ch+=32; putchar(ch); } else { ch-=32; putcha原创 2016-05-26 12:23:23 · 517 阅读 · 0 评论 -
【C语言】求两个数的最大公约数
思路:辗转相除法:以小的数除大数,所得的是整数,那这个数就是最大公约数,不然就用余数来除刚才的除数,直到得到整数,这时作为除数的就是最大公约数。#includeint main(){ int m,n,t,p,r; printf("请输入两个数:"); scanf("%d %d",&m,&n); if((m >= n) && (m % n==0)) { t=n; }原创 2016-05-26 12:23:20 · 1224 阅读 · 0 评论 -
【C语言】三个数从大到小输出
方法一:#includeint main(){ int a,b,c,t; printf("请输入三个数:\n"); scanf("%d%d%d",&a,&b,&c); if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=c; c=t; } if(b<c) { t=b; b=c; c=t; }原创 2016-05-26 12:23:17 · 13379 阅读 · 0 评论 -
【C语言】获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
#includeint main(){int arr[32];int m=0,i=0,count=0;printf("请输入一个十进制数:\n");scanf("%d",&m);for(i=0;m!=0;i++) { arr[i]=m%2; m=m/2; count=i+1; } for(;count<32;原创 2016-05-26 12:23:15 · 2512 阅读 · 0 评论 -
【C语言】交换两个数组内容(数组等大)
1.加法,异或实现#includeint main(){ int a[10],b[10]; int i=0; printf("请输入数组a:\n"); for(i=0;i<sizeof(a)/sizeof(a[0]);i++) scanf("%d",&a[i]); printf("请输入数组b: \n"); for(i=0;i<si原创 2016-05-26 12:23:09 · 904 阅读 · 0 评论 -
【C语言】求1+2!+3!+...+20!的和
#include "stdio.h"main(){ float n,s=0,t=1; for(n=1;n<=20;n++) { t*=n; s+=t; } printf("1+2!+3!...+20!=%e\n",s); getch();}本文出自 “Vs吕小布” 博客,请务必保留此出处http://survive.blog.51cto.com/10原创 2016-05-26 12:23:06 · 12396 阅读 · 3 评论 -
【C语言】输入十个数求最大数
#includeint main(){int arr[10],i = 0,max;printf("请输入10个整数:\n"); for(i = 1;i<10;i++) scanf("%d",&arr[i]); max=arr[0]; for(i = 1;i<10;i++) { if(arr[i] > max) max = arr[i原创 2016-05-26 12:23:03 · 5025 阅读 · 0 评论