strchr、strtok
时间: 2023-07-03 10:32:02 浏览: 110
strchr和strtok都是C标准库中的字符串处理函数。
strchr已经在上一个回答中进行了介绍,这里就不再赘述。
strtok用于将字符串切割成若干个标记(token)。函数原型如下:
```
char *strtok(char *str, const char *delim);
```
其中,str是要切割的字符串,delim是分隔符,函数返回指向下一个标记的指针。如果没有下一个标记,则返回NULL。该函数会修改原字符串,将分隔符替换为'\0',所以在多次调用该函数时,第一个参数应该为NULL,以便函数在上一次调用结束的位置继续处理。
例如,下面的代码将字符串str按照逗号分隔成多个标记,并打印每个标记:
```c
char str[] = "apple,banana,orange";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
```
输出:
```
apple
banana
orange
```
需要注意的是,由于strtok会修改原字符串,所以如果需要保留原字符串,可以先复制一份再对复制后的字符串进行处理。
相关问题
C语言中strtok
C语言中的strtok()函数可以将字符串按照指定的分隔符进行分割,可以通过遍历字符串并使用strtok()函数,逐个获取每个分割后的部分。以下是范例演示。
<<引用:C语言strtok()函数:字符串分割。例程:
```c
#include <string.h>
#include <stdio.h>
int main () {
char str[80] = "ab,cd,ef";
const char s = ",";
char *token;
/* 获取第一个子字符串 */
token = strtok(str, s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
printf( "%s\n", token );
token = strtok(NULL, s);
}
return(0);
}
执行结果:
ab
cd
ef
``` [^1]>>
上面的代码将str字符串按照逗号进行分割,并输出了每个分割后的子字符串。
除此之外,以下是另一个通过自己实现my_strtok()函数来进行字符串分割的例子。
<<引用:【C语言】最短时间带你实现strtok,字符串分割函数,建议收藏!!!。
```c
#include <stdio.h>
char* my_strtok(char* str, const char* delim) {
static char* p = NULL;
if(str) p = str;
if(!p) return NULL;
char* ret = p;
while(*p && !strchr(delim, *p)) p++;
if(*p) *p++ = '\0';
return ret;
}
int main() {
char a[] = "wo ai ni";
char* retArr[10];
retArr = my_strtok(a, " ");
int i = 1;
while (retArr[i++] = my_strtok(NULL, " "));
for (int i = 0; i < 10; i++) {
printf("%s ", retArr[i]);
}
return 0;
}
```
[^2]>>
上面的代码也是将字符串按照空格进行分割,并输出每个子字符串。
C++ strtok
C语言中的strtok函数是用来分割字符串的。在使用strtok函数之前,我们需要包含<string.h>头文件。strtok函数使用一个指定的分隔符将字符串分割成多个子字符串,并返回分割后的第一个子字符串的指针。
下面是一个使用strtok函数的示例代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "This is a sample string";
char *token;
// 获取第一个子字符串
token = strtok(str, " ");
// 继续获取其他的子字符串
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " ");
}
return 0;
}
```
输出结果为:
```
This
is
a
sample
string
```
上述代码中,我们首先使用strtok函数将字符串str按照空格进行分割,并将第一个子字符串的指针赋给token。然后,我们通过循环继续获取其他的子字符串,直到token为NULL为止。
需要注意的是,strtok函数会破坏被分割字符串的完整性,调用前和调用后的字符串已经不一样了。如果需要保持原字符串的完整,可以使用其他方法,比如结合strchr和sscanf函数来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C/C++字符串函数strtok()详解](https://blog.csdn.net/ostarjennyo/article/details/127676519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C++ strtok函数详解](https://blog.csdn.net/weixin_45525272/article/details/114164364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文