- 博客(13)
- 收藏
- 关注
原创 Linux 五大存储区
这些变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。静态存储区在程序启动时就被分配好空间,并且在整个程序运行期间都保持在内存中。堆区是用于存放进程运行中被动态分配的内存段的内存区域。栈区是用于存放函数的参数值和局部变量的值的内存区域。形式如下:a,b,c就是存储在栈区。这部分区域的大小在程序运行前就已经确定,它存储的是CPU执行的机器指令。程序代码区在程序启动时就被加载到内存中,且在整个程序运行期间都保持在内存中。
2024-03-21 20:41:30
258
原创 C++友元类和友元函数
友元类有以下两个特点:(1)如果B声明成A的友元类,那么B可以访问A的protected、private成员。但是A不能访问B的protected、private成员。(2)如果C继承B,C不能访问A的protected、private数据成员和函数,只能访问public。但是可以通过B获取到A的protected、private信息。现在按照以下代码深入分析:#include <stdlib.h>#include <stdio.h>#include <s
2021-08-03 22:29:14
129
原创 不使用C/C++库函数,实现strtok功能
使用C语言,编写函数,要求不适用C/C++库函数,实现strtok函数功能。思路:Linux函数原型:char *strtok(char *str, const char *delim); 返回分隔符pSubStr之前的字符串。#include <stdlib.h>#include <stdio.h>#include <string.h>#include <assert.h>//char *strtok(char *str, const c
2021-07-25 19:25:01
140
原创 不使用C/C++库函数,实现strstr函数功能
使用C语言,编写程序,不使用C/C++库函数,实现strstr函数功能。思路:Linux函数原型:char *strstr(const char *haystack, const char *needle);如:haystack="abcdefghij",needle="cde",函数返回cdefghij。#include <stdlib.h>#include <stdio.h>#include <string.h>#include <assert.
2021-07-25 17:28:14
923
原创 不适用C/C++库函数,实现strcpy函数功能
思路:函数原型strcpy(char *str1, char *str2),将str2赋值给str1,返回str1指针。#include <stdlib.h>#include <stdio.h>#include <string.h>#include <assert.h>char* mystrcpy(char *pStr1, char *pStr2) { if (pStr1 == NULL || pStr2 == NULL) {
2021-07-25 16:53:36
290
原创 不适用C/C++库函数,实现strcmp函数功能
使用C语言,编写程序,实现strcmp功能。思路:将两个字符串从头开始比较,退出循环比较条件:(1)遇到字符串'\0'就退出比较,(2)遇到两个字符串字符不相等。退出循环比较后,比较当前的字符ACSSII码,*str1> *str2, return 1;*str1 < *str2, return -1;*str1 == *str2, return 0。// 不使用c库函数实现strcmp函数,str1> str2, return 1, str1 < str2, retu..
2021-07-25 16:06:54
704
原创 字符串内容重排
使用C语言,编写函数,实现对给定的字符串(包含英文字母、数字、符号)的处理,经处理的字符串按照字母、数字、符号的顺序排放,顺序不变。思路1:先统计字母、数字、符号的个数,假设分别为a,b,c,字符串总长度是d,那么字母下标分布应该是:[0, a-1],数字下标分布应该是:[a, a+ b- 1],符号下标分布应该是:[a+ b, d - 1]。定义一个临时空间,拷贝原字符串到这个临时空间,然后遍历临时空间,按照下标分布赋值到源字符串对应位置。这个方法较容易理解和实现。#include <st
2021-07-24 23:26:34
831
原创 查找两个字符串中的最大公共字串
使用C语言,编写函数,查找两个字符串中最大公共字串,如:字符串A="abcdefg",字符串B="cdeab",做大公共字串为“cde”。思路:先确定短的字符串short_str和长的字符串long_str,用short_str在long_str中匹配,如果没匹配到,将short_str最后一个字符置'\0',再去匹配,直到匹配到了返回字符串指针。#include <stdlib.h>#include <stdio.h>#include <string.h>
2021-07-23 22:31:11
898
1
原创 在字符串中删除指定的特定字符
使用C语言,编写一个尽可能高效的函数,删除字符串中特定字符。思路:要求尽可能高效,定义一个256的int数组,将需要删除的字符ASCII作为数组下标,要删除的置1,注意点:处理后的字符串要加'\0'。#include <stdlib.h>#include <stdio.h>#include <string.h>int del_specific_char(char szStr[], const char szMvChar[]){ //ASCII范
2021-07-23 11:51:30
4057
原创 找出0/1字符串中0和1连续出现的最大次数
使用C语言,编写函数,找出找出0/1字符串中0和1连续出现的最大次数,如110000111111000111111111,0连续出现的最大次数是4,1连续出现的最大次数是9。思路:定义两个临时变量,tmpmax0和tmpmax1,表示每次连续统计的个数;定义一个标识,表示当前统计的是0还是1,如果遇到0和1统计的转折点,记录转折前的连续统计最大个数,并将转折之前的临时值置0;当最后一段字符走不到转折点,需要在遍历完字符串之后比较并获取连续出现的最大统计值。#include <stdlib.h
2021-07-22 21:38:08
463
原创 从字符串指定位置删除指定长度字串
使用C语言编写函数,从字符串指定位置开始删除指定长度字串,如:“abcdefg”,从第3位开始删除3个字符,输出为:“abfg”。思路:删除的起始数组下标为:nPos -1,跳过删除字串,下一个字符数组下标:nPos + n - 1,将nPos + n - 1位置开始的字符往nPos -1处赋值,下标+1,循环操作,直到遇到字符串结束符,注意:针对新的字符串最后一位加上'\0'。#include <stdlib.h>#include <stdio.h>#include
2021-07-21 22:14:45
1799
原创 字符串循环右移n个字符
使用C语言编写函数,将字符串循环右移n个字符,例如:abcdefg,循环右移3位,efgabcd。第一次看到这个题意时,发现如果n大于等于字符串长度应该怎么处理并不明确,并且也没有限制不能使用库函数,所以个人理解如下,如有不对,希望大家批评指正。#include <stdlib.h>#include <stdio.h>#include <string.h>void MoveRight(char *pStr, int n){ if (pStr ==
2021-07-20 22:23:28
1497
原创 字符串翻转
编写一个函数,将字符串string中的单词位置倒置,如:“I am a student”,倒置后是 “student a am I”。单词内部结构不变。解题思路:先将整个字符串倒置,再将每个单词倒置回来。void turn_over_str(char *str, int begin, int end){ while (begin < end) { char tmp = str[begin]; str[begin] = str[end];
2021-07-19 22:25:05
80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人