
C语言
sofia_m
这个作者很懒,什么都没留下…
展开
-
【C语言】C程序中正则表达式的使用
1、C/C++中的正则表达式标准的C和C++都不支持正则表达式的使用,但是在某些场景下正则表达式的存在可以为程序员带来很大的遍历,比如用户注册中对用户名和密码的判断,看是否符合命名规则。虽然不支持,但是有一些函数库可以帮助我们实现在C中使用正则表达式的诉求。比如Linux中带有的Perl-Compatible Regular Expression库。C语言中处理正则表达式的函数有r...原创 2018-08-25 15:36:45 · 24582 阅读 · 1 评论 -
【编程练习】remove-duplicates-from-sorted-array
remove-duplicates-from-sorted-array时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 32768K,其他语言 65536K 64bit IO Format: %lld 本题可使用本地IDE编码,不做跳出限制,编码后请点击“保存并调试”按钮进行代码提交。题目描述Given a sorted array, remove the d...原创 2018-07-18 20:55:01 · 336 阅读 · 0 评论 -
各类排序算法模拟实现
1、插入排序类1.1 直接插入排序时间复杂度O(n^2) 空间复杂度O(1) 1.1.1 基本思想:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完位置。1.1.2 源码#include<stdio.h>#include&amp原创 2018-06-09 23:13:20 · 752 阅读 · 0 评论 -
【C语言】浅析结构体内存对齐
1、结构体内存对齐1.1 结构体内存对齐是用空间换取时间的做法why: 首先结构体中包含不同类型(int,char,int ,int [ ],int [],char (*p) []等等)的数据,而这些数据的大小是完全不同的。如上图所示:在不使用内存对齐规则时,可以看出节省了空间,但当内核要读取数据时会比较麻烦,需要遍历每一个内存块,判断是不是自己要找的数据,时间复杂...原创 2018-06-06 21:32:18 · 506 阅读 · 0 评论 -
【C语言】模拟实现一个atoi将字符串转换成整形的函数
源码:#include<stdio.h>#include<Windows.h>#include<iostream>#include<string>#include<vector>#include<assert.h>using namespace std;#pragma warning(disable:4996...原创 2018-06-04 23:26:17 · 1160 阅读 · 0 评论 -
【C语言】位操作符:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字。
一、题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字。二、解题思路一:遍历法这个方法是将数组遍历两遍,找出只出现一次的数,并输出。 这个方法的缺点是时间复杂度高,为O(N^2),程序并不高效。源码:#include&lt;stdio.h&gt;#include&lt;Windows.h&gt;#include&lt;assert.h&g...原创 2018-05-15 22:58:57 · 1060 阅读 · 0 评论 -
【C语言】所有数据都是成对出现的,找出只出现一次的数据
源码:#include<stdio.h>#include<Windows.h>#include<assert.h>int find_data(int arr[], int size){ int i = 0; int data = arr[0]; for (i = 1; i < size; i++){ da...原创 2018-05-20 17:25:42 · 757 阅读 · 0 评论 -
2018省赛第九届蓝桥杯C/C++ B组 个人代码 递增三元组
题目:递增三元组给定三个整数数组 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 请你统计有多少个三元组(i, j, k) 满足: 1. 1 <= i, j, k <= N 2. Ai < Bj < Ck 【输入格式】 第一行包含一个整数N。 第二行包含N个整数A1, A...原创 2018-04-02 16:44:51 · 908 阅读 · 5 评论 -
【C语言】在杨氏矩阵中查找一个数
题目:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的。在这样的数组中查找一个数字是否存在? 要求:时间复杂度小于O(N);例:数组1 2 3 4 5 6 7 8 9解题思路:首先我们肯定不能用常规的依次遍历来查找,这样做时间复杂度不满足题目要求;那么我们应该从何处下手呢?首先...原创 2018-02-13 21:11:20 · 504 阅读 · 0 评论 -
【编程练习】求和
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来原创 2018-07-20 16:50:15 · 2134 阅读 · 0 评论 -
【编程练习】字符串中找出连续最长的数字串
读入一个字符串str,输出字符串str中的连续最长的数字串原创 2018-07-20 16:53:27 · 1514 阅读 · 0 评论 -
【C++】C++复习----C++异常处理
C语言异常处理C语言异常处理1、原创 2018-08-23 23:28:41 · 2312 阅读 · 1 评论 -
【C语言】C复习----C异常处理
1、C异常处理1.1 传统错误处理方式:终止程序(除数为0);返回一个表示错误的值,附加错误码(GetLastError());返回一个合法值,让程序出于某种非法的状态(atoi());调用一个预先准备好在出现“错误”的情况下用的函数(回调函数);暴力解决方式:abort()或者exit();使用goto语句;setjmp()和longjmp()组合;1.2...原创 2018-08-22 16:11:39 · 638 阅读 · 0 评论 -
【剑指offer】面试题11----数值的整数次方
实现函数double Power(double base,int exponent),求base 的exponent次方。不得使用库函数,同时不需要考虑大数问题。原创 2018-08-14 14:30:46 · 236 阅读 · 0 评论 -
【剑指offer】面试题9----斐波那契数列
1、题目描述写一个函数,输入n,求Fibonacci数列的第n项,斐波那契数列的定义如下:或者:一只青蛙一次可以跳上一级台阶,也可以跳上两级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法。2、解题思路首先这个题不考虑使用递归的方法,递归过于浪费空间,而且会造成很大的浪费。在这里使用简单的循环来实现。3、源码/*Fibonacci数列*/#inc...原创 2018-08-01 14:15:36 · 394 阅读 · 0 评论 -
【剑指offer】面试题8----旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。原创 2018-07-31 23:25:24 · 200 阅读 · 0 评论 -
【剑指offer】面试题5----从尾到头打印单链表
输入一个链表的头结点,从尾到头反过来打印出每个节点的值原创 2018-07-27 17:26:07 · 664 阅读 · 0 评论 -
【剑指offer】面试题4---替换空格
请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。原创 2018-07-27 15:57:17 · 263 阅读 · 0 评论 -
【编程练习】最大连续数列和
对于一个有正有负的整数数组,请找出总和最大的连续数列。给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。原创 2018-07-21 20:18:36 · 970 阅读 · 0 评论 -
【C语言】调整数组使奇数全部都位于偶数前面
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:首先我们先设置一个简单的小场景:这里有一个数组arr[9]={1,2,3,4,5,6,7,8,9}.要使数组的奇数在前偶数在后,我们可以设置两个标记,一个start = 0,从数组起始的地方开始向后遍历,一个 end = len - 1...原创 2018-02-13 17:12:09 · 587 阅读 · 3 评论 -
【C语言】实现一个函数,可以左旋字符串中的K个字符
题目说明:要求实现一个函数,可以左旋字符串中的K个字符; 其中: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB解法一:解题思路:拿到一组字符串之后,我们首先设置一个临时变量,存放字符串中的第一个字符。 然后把字符串中的其余字符通过循环依次前移一位,最后再把临时变量的值赋给字符串的最后的一位。以上是字符串的一次左旋,要左旋几次就可以通过循环重...原创 2018-02-26 19:18:32 · 783 阅读 · 3 评论 -
【C语言】求取第n个斐波那契数的时间复杂度、空间复杂度分析,用三种方式实现(普通递归,循环,优化递归)
斐波那契数列递归算法循环算法优化递归算法以及它们的时间复杂度,空间复杂度分析原创 2017-12-13 19:56:00 · 5754 阅读 · 1 评论 -
【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
#include#include#includeint main(int argc,char* argv[]){ FILE* pfRead = NULL; FILE* pfWrite = NULL; int ch = 0; if(argc != 3) { perror("参数出错\n"); exit(EXIT_FAILURE); } pfRead = fopen(a原创 2017-09-13 22:19:03 · 1056 阅读 · 0 评论 -
判断1000~2000年之间的闰年(C语言)
#include#include#includeint is_year(int year){ int num = 0; return ((year%4==0&&year%100!=0)||year%400==0); }int main(){ int year = 0; int ret = 0; for(year=1000;year<2000;year++)原创 2017-08-13 22:02:42 · 503 阅读 · 0 评论 -
递归方式实现打印一个整数的每一位(C语言)
#include#include#include#includevoid print(int n){ if(n>9) { print(n/10); } printf("%d ",n%10);}int main(){ int num = 1234; print(num); system("pause"); return 0;}原创 2017-08-10 23:02:23 · 1482 阅读 · 0 评论 -
递归和非递归分别实现求n的阶乘
#include#include#include#includeint Factorial_r(int num){ //非递归实现 int k = 1; while(num > 0) k *= num--; return k;}int Factorial(int num){ //递归实现 return num > 0 ? num *原创 2017-08-10 22:57:26 · 2769 阅读 · 0 评论 -
递归和非递归分别实现strlen(C语言)
#include#include#include#includeint my_strlen_2(const char* str_2){ //递归实现 assert(str_2 != NULL); if(*str_2) return 1+my_strlen_2(str_2+1); else return 0;}int my_strlen_1(const char*原创 2017-08-10 22:40:09 · 768 阅读 · 0 评论 -
谁是凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。#include#includeint main(){ int i, sum=0; char kille原创 2017-08-17 16:48:54 · 431 阅读 · 0 评论 -
编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
#include#include#include#includeint my_strlen(const char* str){ int count = 0; assert(str); while(*str != '/0') { count++; str++; } return count;}void reverse_string(char arr[]){原创 2017-08-09 13:29:29 · 570 阅读 · 0 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和(C语言)
#include#includeint DigitSum(unsigned int n){ int sum = 0; if(n) sum=(n%10)+(DigitSum(n/10)); return sum;}int main(){ unsigned int n = 0; while(1) { printf("请输入一个非负整数:\n"); scanf原创 2017-08-08 13:47:24 · 659 阅读 · 2 评论 -
三种方式实现strlen(c语言)
#include#include#include#include#includeint my_strlen_1(const char* str){ //计数器实现 int count = 0; assert(str); while(*str) { count++; str++; } return count;}int my_strlen_2(const c原创 2017-09-07 22:05:20 · 541 阅读 · 0 评论 -
模拟实现strcpy(C语言)
#include#include#include#include#includechar* my_strcpy(char* dest,const char* src){ char *ret = dest; assert(src != NULL); assert(dest != NULL); while(*dest++ = *src++) { ; } return r原创 2017-09-07 22:07:21 · 441 阅读 · 0 评论 -
(C语言)动态内存开辟
数据的元素存储于内存中连续的位置上,当一个数组被声明时,他所需要的内存在编译时就被分配。当然,我们也可以使用动态内存分配在运行时为他分配内存。在动态内存分配中我们需要经常用到malloc,free,calloc,realloc这四个函数。 1、malloc和free malloc和free分别用于执行动态内存分配和释放。当我们需要调用一块内存时,就可以选择mall原创 2017-09-02 17:57:17 · 933 阅读 · 0 评论 -
【C语言】打印乘法口诀表(正三角,倒三角)
源码:#include#include#include#define LINE 9//正三角void MulTableSecond(){ int i,j; for(i=1;i<=LINE;i++){ for(j=1;j<=i;j++){ printf("%d*%d =%d\t",j,i,i*j); } printf("\n"); }}//倒三角void原创 2017-11-12 19:27:49 · 15275 阅读 · 0 评论 -
【C语言】找出一个字符串中第一个只出现一次的字符
题目描述:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。方法一: 简单粗暴的遍历完成,只适用于字符串较小时使用,算法的时间复杂度为O(n2),因此并不推荐使用;代码:#include#include#include#define MAX 30int FindFirst原创 2017-11-12 17:58:42 · 10376 阅读 · 3 评论 -
(C语言)关于位段空间的使用情况的经典面试题解析
求以下程序的执行结果(小端存储):#include#include#pragma pack(4)int main(){ unsigned char puc[4]; struct tagPIM { unsigned char ucPim1; unsigned char ucData0:1; unsigned char ucData1:2; unsigned cha原创 2017-10-08 22:12:16 · 968 阅读 · 0 评论 -
普通冒泡排序法与通用冒泡排序法(C语言)
一、普通冒泡排序法#include#include#include#includevoid bubble_sort(int arr[],int sz){ int i = 0; int j = 0; for(i=0;i<sz-1;i++) { for(j=0;j<sz-1-i;j++) { if(arr[j] > arr[j+1]) { i原创 2017-09-09 23:00:42 · 609 阅读 · 0 评论 -
模拟实现strstr(c语言)
#include#include#include#include#includechar* my_strstr(const char* str, const char* substr) { const char* s1 = str; const char* s2 = substr; const char* ret = str;//ret就是用来保存原创 2017-09-07 22:14:30 · 336 阅读 · 0 评论 -
模拟实现strcmp
#include#include#include#include#includeint my_strcmp(const char* arr1,const char* arr2){ assert(arr1); assert(arr2); while(*arr1 == *arr2) { if(*arr1 == '\0') return 0; arr1原创 2017-09-07 22:11:42 · 317 阅读 · 0 评论 -
模拟实现strcat
#include#include#include#include#includechar *my_strcat(char *dest,char *src){ char *ret = dest; assert(dest); assert(src); while(*dest) { dest++; } while(*dest++ = *src++) { ; }原创 2017-09-07 22:09:18 · 435 阅读 · 0 评论