《编程思维与实践》学习心得5
1.字符串处理常用函数
1.strcmp函数: strcmp(str1,str2)
按照字典序比较str1和str2(如"A"<“B”,“A”<“AB”,“A”<“a”):
str1=str2时,返回0,
str1>str2时,返回值>0,
str1<str2时,返回值<0.
2.strcat函数: strcat(str1,str2)
str2加到str1尾端,返回值为str1的地址.
3.strcpy函数: strcpy(str1,str2)
把str2复制到str1中, 返回str1的地址.
4.strncpy函数: strncpy(str1,str2,n)
将str2中的n的字符(从首位开始)复制到str1中, 返回str1的地址
5.检索字符串\字符函数:
char* strchr(str,ch) 返回第一个字符ch在str中出现的地址;
char* strrchr(str,ch) 返回最后一个字符ch在str中出现的地址;
char* strstr(str1,str2) 返回第一个字符串str2在str1中出现的地址;
char* strrstr(str1,str2) 返回最后一个字符串str2在str1中出现的地址;
6.转浮点数\整数
atoi(转int),atof(转double),atol(转long int),atoll(转long long).
7.isspace(判断是否位空格或Tab键)和isdigit(判断是否为十进制数字字符).
2.目前遇到的题目可以考虑的思路
1.递归/迭代,若需要记录上一次的结果则采用迭代(将算出每一步的结果存起来以便计算下一步),核心是找递推关系式.
2.进制的借位与进位.
3.栈的思想(用一个指标去判断进出).
4.位运算可用于判断二进制位数或组合问题.
5.高精度问题开数组存储:除法模拟笔除计算过程,乘法先将每一位乘于某个数后最后再统一考虑进位(利用%求出该位最终的数,/10求出进位数).
6.去重可以考虑输出时候用条件判断重复的只输出一次.
7.暴力穷举遍历所有情况.
3.目前常见的问题
1.排序问题使用qsort函数时需要注意如果希望有些数据保持相对位置不变,则应先将其移到后端(或前端),且可以用结构体的指标来表示并不需要改变其位置,这是因为qsort排序时是将指针进行移位,中间数据的相对位置会发生变化.
2.strcpy在字符串移位的时候不应采用自覆盖,不然结果容易出现问题,应该先用一个temp去存取.
3.当心逻辑运算符"==“和赋值运算符”=".
4.各种运算的优先级,单目运算符结合方向是从右向左,其他为了以防万一最好利用括号来表示先后顺序.
5.当从极端情况去考虑时所需的数组很大则需要动态内存分配.
6.小心数据是否会超出int的范围,位运算的1需要32位还是64位.
7.超时需要考虑循环是否截止或者截止条件是否有误,再考虑算法的复杂度.
8.字符数组要小心越界的问题(‘\0’),应该开的稍微大一些.