
申请的内存用于保存字符串,在申请后首先一定要赋初始值为0;
如果字符串最大长度为10, 那么定义或者申请内存至少为11个字节;
例如,字符串长度为10, 那么需要如下定义char ans[11];已经出过很多次错
strtok_s, strcmp, strlen, strcat,strcpy,strncpy
2.1 strcpy默认会拷贝源字符串中的0;strcat是追加,也会拷贝源字符串中的0;
2.2 strlen是不包括结束符0的,即有效的index为strlen(s) - 1;
2.3 申请内存来保存字符串的时候,申请的大小一定要是长度加1,最后一个字符保存结束符;
2.4 strstr(const char *hayStatck, const char *needle),
在第一个入参地址的字符串中搜索子串,搜索成功,返回子串的首地址;
2.5 字符串追加可以用常量string,strcat(stringAddr, "->");
strtok_s参数的分隔符是const字符串常量,返回的是被分解的第一个字符串, 适用于分隔符重复出现的问题;
3.1 如果只出现一次,不要使用;
3.2 不能识别多个分隔符同时出现的情况;
3.3 分隔符出现在字符串最后也不能识别;
3.4 strtok会修改原始的字符串内容,一般建议再开辟一块内存,先复制原始字符串内容,在进行分解;
char *token;
const char *delim = " ";
token = strtok(s, delim);
while (token != NULL) {
token = strtok(NULL, delim);
} char *nextToken;
char *temp;
temp = strtok_s(destIp, ".", &nextToken);
while (temp != NULL) {
temp = strtok_s(NULL, ".", &nextToken);
}如果题目中出现的是字符串是数字,而且需要比较数字的大小,比如求最大值和最小值;这时优先考虑使用strcmp函数来比较字典序;
功能强大的sscanf函数和sprintf函数,sscanf和sprintf是一对组合,用于解决字符串的格式化输入和输出。
6.1 sscanf很容易将字符串的各个元素解析出来,代替了strtok分割的复杂操作,也可以代替atoi函数;
如果提取字符串中的int型,对分隔符没有要求;
如果要提取字符串中的子字符串,必须以空白、换行和制表符来分割;
技巧:将原始字符串中的分割字符串用空格替换,这样就方便使用sscanf函数来将里面的各个元素提取出来
6.2 sprintf很容易就将各个元素按照一定的格式输出到指定字符串中,代替了strcat,intToStr的复杂操作;
很容易就能将各种类型转换成string;
//将整型转换为string,sprintf的最简单的用法
sprintf(stringAddr, "%d", intValue);
//将string转换成整型;sscanf的最简单的用法
int value;
sscanf(stringAddr, "%d", &value); -->下面是提取int型整数,对分割符没有要求;
char ipStr[] = "192.168.0.1";
int ip[4];
sscanf(ipStr, "%d.%d.%d.%d", ip, ip + 1, ip + 2, ip + 3);下面提取了str和int,并且按照指定格式输出了指定字符串;
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
char output[1000];
sprintf(output, "%s %d, %d = %s\n", month, day, year, weekday);