您现在的位置是:主页 > news > 做的好的排版网站/设计一个简单的网页
做的好的排版网站/设计一个简单的网页
admin2025/4/30 9:34:39【news】
简介做的好的排版网站,设计一个简单的网页,上海网站建设app,project 网站开发计划原型: char *strtok(char *str,const char *delim)第一个参数:要分割的字符串第二个参数:要以哪个字符类型来分割返回值: 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。…
做的好的排版网站,设计一个简单的网页,上海网站建设app,project 网站开发计划原型: char *strtok(char *str,const char *delim)第一个参数:要分割的字符串第二个参数:要以哪个字符类型来分割返回值: 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。…
原型: char *strtok(char *str,const char *delim)第一个参数:要分割的字符串第二个参数:要以哪个字符类型来分割返回值: 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
函数说明::当strtok()在参数str的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。
在第一次调用时,str指向要分解的字符串,往后的调用则将参数str设置成NULL。
每次调用成功则返回指向被分割出片段的指针,如果没有可检索的字符串,则返回一个空指针。
先举一个简单的例子,理解一下:
p = strtok(str, “,”);
p为指针,str也是指针,这句代码的意思就是把buf中的字符串以","为分隔符分割开来,分割出来的字符串保存到指针p中。
再次调用strtok函数时,把str换成NULL,不需要再写str。即:
p = strtok(NULL, “,”);
详细代码如下:
1.最原始方便理解代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{ char str[] = "tian1,de,tian2,hello,world"; windows环境下,要定义成数组的形态,否则崩溃 linux下定义成 char *str 是可以的char *p = NULL;p = strtok(str,","); 为什么不是',',因为参数是一个指针if(p!=NULL){printf("获取到的第一个串:p= %s\n",p); }// 获取第二个串的方式很奇葩,跟第一次不一样的是,目标字符串改成 NULLp = strtok(NULL,",");if(p!=NULL){printf("获取到的第二个串:p= %s\n",p); }// 获取第三个串的方式很奇葩,跟第一次不一样的是,目标字符串改成 NULLp = strtok(NULL,",");if(p!=NULL){printf("获取到的第三个串:p= %s\n",p); } // 获取第四个串的方式很奇葩,跟第一次不一样的是,目标字符串改成 NULLp = strtok(NULL,",");if(p!=NULL){printf("获取到的第四个串:p= %s\n",p); }//获取第五个串的方式很奇葩,跟第一次不一样的是,目标字符串改成 NULLp = strtok(NULL,",");if(p!=NULL){printf("获取到的第五个串:p= %s\n",p); }// 分割结束:p = strtok(NULL,",");if(p == NULL){ printf("没有子串了\n");}else{printf("获取到的第六个串:p= %s\n",p); }system("pause");return 0;
}
运行结果:
2.优化上面的代码:
利用找不到子串的时候返回空指针的特点
#include <stdio.h>
#include <stdlib.h>
int main()
{ char str2[] = "yu,jin,chi"; windows环境下,要定义成数组的形态,否则崩溃 linux下定义成 char *str 是可以的int i = 1;p = strtok(str2,",");if(p!=NULL){ printf("获取到第%d个串:p = %s\n",i,p); //获取第一个子串}while(1){i++;p = strtok(NULL,",");if(p != NULL){printf("获取到第%d个串:p = %s\n",i,p); //从第二个子串开始获取直到没有。 }else{printf("没有子串了\n");break; } } system("pause");return 0;
}
运行结果:
3.思考——将分割后的字符串保存(以指针数组来存放):
以定义了 char str[ ] = “yu,jin,chi”;为例
简要分析:
字符串分割后会变为一段段的字符串 ,也就是一段段的地址: "yu" "jin" "chi"
则我们可以定义一个指针来存放: char *p1 char *p2 char *p3
而指针数组char *psubs[ ];可以存放多个地址: psubs[0] = p1 psubs[1] = p2 psubs[0] = p3
实现代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{ char str[] = "yu,jin,chi"; windows环境下,要定义成数组的形态,否则崩溃 linux下定义成 char *str 是可以的char *p = NULL;char *psubs[40]; int i = 1;p = strtok(str,",");if(p != NULL){//printf("第一次获取到的子串:%s\n",p);psubs[i-1] = p; 指针数组:psubs[] 的第一项存放第一个子串} while(p != NULL){p = strtok(NULL,",");if(p != NULL){//printf("第%d次获取到的子串:%s\n",i,p);psubs[i] = p; 指针数组:psubs[] 的第二项存放第二个子串,直到p = NULLi++;}else{printf("没有字串了\n");break;}}int j = 0;for(j=0;j<i;j++){puts(psubs[j]); 输出存放的字符串}system("pause");return 0;
}
运行结果: