上周,老师讲了大整数的运算方法,我对大数的存储和运算还有些不理解,仔细思考了一下,其实还是训练孩子对机器存储数据的各种掌握和运用吧。不多想,先期孩子虽然一直学习,但是缺乏对知识的系统整理,借着最近事情不太紧迫,帮着一起整理一下一些必要的东西。
在进行大整数运算的时候,老师提出了一种用字符串的每个字符存储一个整数位的方法进行运算中,老师用到了cstring库,提到了几个相关的字符串操作函数,一并整理一下常用的几个常用函数:
1.strcpy 字符串拷贝:char*strcpy(char* dest, constchar* src );
2.strncpy 字符串固定字符拷贝:char*strncpy(char* dest,constchar* src, size_t num );
3.strcat 字符串连接:char * strcat ( char * dest, const char * src);
4.strncat 字符串固定字符连接char * strncat ( char * dest, const char * src, size_t num );
5.strcmp 字符串比较:int strcmp ( const char * str1, const char * str2 );
6.strchr 字符串中字符查找:const char * strchr ( const char * str, int character );
7.strstr 字符串中字符串查找:const char * strstr ( const char * str1, const char * str2 );
8.strlen 字符串长度:size_t strlen ( const char * str );
9.memset 字符串初始化或者批量重置:void * memset ( void * ptr, int value, size_t num );
1.字符串复制
1.1.strcpy
strcpy的作用是复制整个字符数组到另一个字符数组,因此也就非常简洁,只有两个参数:
char
前一个是要复制到的目标数组起始位置,后一个是被复制的源数组起始位置。使用也非常简单,下面就用一个例子来说明.
int
1.2. strncpy
strncpy与strcpy很类似,只是可以指定复制多少个字符。它的原型是:
char
显前两个参数的含义与strcpy相同,第三个参数num就是要复制的字符个数。需要注意的是因为是部分复制,所以该函数不会帮你添加’0’,要记得在调用完之后自己添加一个。
int
2.字符串连接
2.1. strcat
strcat的功能是把一个字符串连接到另一个字符串的后面。
char
前一个是目标字符串,后一个是要添加到后面的源字符串。
int
2.2. strncat
根据strcpy和strncpy之间的关系,应该猜到,该函数是可以指定字符个数进行连接。
char
3 字符串比较
3.1. strcmp
对两个字符数组我们不能直接if (s > t)这样比较,要这样比较的是两个字符数组的指针的地址。因此要用到strcmp函数。
int
两个参数是要比较大小的字符数组,返回值是它们的大小关系。具体方式是:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’0’为止。
如果str1和str2相等则返回0;
如果str1小于str2则返回小于零,如果str1大于str2,则返回大于零。
int
输出结果:
Guess my favourite fruit? orange
Guess my favourite fruit? apple
Correct answer!
4 字符串查找
4.1 strchr
strchr函数可以在一个字符串里找某个字符第一次出现的位置。
const
前一个是原字符串,后一个是要查找的字符。
int
输出:
Looking for the ‘s’ character in “This is a sample string”…
found at 4
found at 7
found at 11
found at 18
4.2 strstr
strstr函数可以在一个字符串里查找另一个字符串第一次出现的位置。
const
其中前一个是文本串,后一个是模式串。
int
输出:
This is a sample string。
5.其他函数
5.1字符串长度
strlen用于求一个字符数组的长度,注意它是从给定的起始位置开始不断往后尝试,直到遇到’0’为止的,因此它的时间复杂度并不是常数级别的,而是取决于字符数组的长度,在字符数组没有变动的情况下请务必不要重复调用。
size_t strlen ( const char * str );
那么参数毋庸置疑自然就是要求长度的字符数组了。
int
5.2 改变连续一段字符的值
memset是一个非常好用的函数,不仅在字符串方面。它可以把连续一段区间的内存修改成同一个值,以字节为单位。而一个字符正好就是一个字节,这也就让memset可以很好的为字符串的区间修改提供服务。
void
ptr指向要修改的内存块的起始地址,value是要修改成什么值,num是修改多少个。
int