您现在的位置是:主页 > news > 做的好的排版网站/设计一个简单的网页

做的好的排版网站/设计一个简单的网页

admin2025/4/30 9:34:39news

简介做的好的排版网站,设计一个简单的网页,上海网站建设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;
}
															运行结果:

在这里插入图片描述