首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用strtok、malloc和realloc从字符串生成标记数组

的过程如下:

  1. 首先,需要包含头文件<string.h>来使用strtok函数,以及头文件<stdlib.h>来使用malloc和realloc函数。
  2. 定义一个字符串变量来存储待分割的字符串。
  3. 使用strtok函数将字符串分割成多个标记。strtok函数的原型如下:
  4. 使用strtok函数将字符串分割成多个标记。strtok函数的原型如下:
    • 第一次调用时,传入待分割的字符串作为第一个参数,传入分割符作为第二个参数。该函数会返回第一个标记的指针,并将原字符串中的分割符替换为'\0'。
    • 后续调用时,传入NULL作为第一个参数,函数会继续返回下一个标记的指针,直到所有标记都被提取完毕。
  • 使用malloc函数动态分配一个指针数组,用于存储标记。
  • 使用realloc函数动态调整指针数组的大小,以适应不确定数量的标记。
  • 遍历每个标记,将其存储到指针数组中。
  • 最后,返回指针数组。

下面是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char** generateTokenArray(const char* str, const char* delim, int* tokenCount) {
    char* copyStr = strdup(str);  // 复制原字符串,以免修改原字符串
    char* token = strtok(copyStr, delim);
    char** tokenArray = NULL;
    int count = 0;

    while (token != NULL) {
        count++;
        tokenArray = (char**)realloc(tokenArray, count * sizeof(char*));
        tokenArray[count - 1] = strdup(token);
        token = strtok(NULL, delim);
    }

    *tokenCount = count;
    free(copyStr);
    return tokenArray;
}

int main() {
    const char* str = "Hello,World,How,Are,You";
    const char* delim = ",";

    int tokenCount = 0;
    char** tokens = generateTokenArray(str, delim, &tokenCount);

    printf("Token Count: %d\n", tokenCount);
    for (int i = 0; i < tokenCount; i++) {
        printf("Token %d: %s\n", i + 1, tokens[i]);
        free(tokens[i]);
    }

    free(tokens);
    return 0;
}

这段代码将字符串"Hello,World,How,Are,You"按逗号分割成多个标记,并将标记存储在动态分配的指针数组中。最后,打印出每个标记的内容。

注意:在使用完动态分配的内存后,需要使用free函数释放内存,以避免内存泄漏。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言函数小集合

一、字符操作 函数名: fputc 功 能: 送一个字符到一个流中 用 法: int fputc(int ch, FILE *stream); 函数名: fputs 功 能: 送一个字符串到一个流中 用 法: int fputs(char *string, FILE *stream); 函数名: sprintf 功 能: 输出数据到一字符串中(而printf是输出到屏幕上) 函数名: fread 用 法: fread(fa,4,5,fp); 功 能: 其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中 函数名: strncmp 用 法: extern int strncmp(char *s1, char *s2, int n); 功 能: 比较字符串s1和s2的前n个字符。 详 细: 逐次比较两个字符串前n个字符中的每一个字符(用第一个字符串的字符的ASCII值减去第二个字符串的相应字符的ASCII值),如果相等则继续比较下一个;如果不等,ASCII的差值就是返回值。 函数名: isalnum 原型:extern int isalnum(int c); 用法:#include <ctype.h>  功能:判断字符c是否为字母或数字  说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。 函数名: isalpha 原型:extern int isalpha(int c); 用法:#include <ctype.h> 功能:判断字符c是否为英文字母 说明:当c为英文字母a-z或A-Z时,返回非零值,否则返回零。 函数名: iscntrl 原型:extern int iscntrl(int c); 用法:#include <ctype.h> 功能:判断字符c是否为控制字符 说明:当c在0x00-0x1F之间或等于0x7F(DEL)时,返回非零值,否则返回零。 函数名: isdigit 原型:extern int isdigit(int c); 用法:#include <ctype.h> 功能:判断字符c是否为数字 说明:当c为数字0-9时,返回非零值,否则返回零。 函数名: islower 原型:extern int islower(int c); 用法:#include <ctype.h> 功能:判断字符c是否为小写英文字母 说明:当c为小写英文字母(a-z)时,返回非零值,否则返回零。 函数名: isascii 原型:extern int isascii(int c); 用法:#include <ctype.h> 功能:判断字符c是否为ascii码 说明:当c为ascii码时,返回非零值,否则返回零。ascii码指0x00-0x7F之间的字符 函数名: isgraph 原型:extern int isgraph(int c); 用法:#include <ctype.h> 功能:判断字符c是否为除空格外的可打印字符 说明:当c为可打印字符(0x21-0x7e)时,返回非零值,否则返回零。 函数名: isprint 原型:extern int isprint(int c); 用法:#include <ctype.h> 功能:判断字符c是否为可打印字符(含空格) 说明:当c为可打印字符(0x20-0x7e)时,返回非零值,否则返回零。 函数名: ispunct 原型:extern int ispunct(int c); 用法:#include <ctype.h> 功能:判断字符c是否为标点符号 说明:当c为标点符号时,返回非零值,否则返回零。 标点符号指那些既不是字母数字,也不是空格的可打印字符。 函数名: isspace 原型:extern int isspace(int c); 用法:#include <ctype.h> 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。 空白符指空格、水平制表、垂直制表、换页、回车和换行符。 函数名: isupper 原型:extern int isupper(int c);  用法:#include <ctype.h>  功能:判断字符c是否为大写英文字母 说明:当c为大写英文字母(A-Z)时,返回非零值,否则返回零。 函数名: isxdigit 原型:extern int isxdigit(int c); 用法:#include <ctype.h> 功能:判断字符c是否为十六进制数字 说明:当c为A-F,a-f或0-9之间的十六进制数字时,返回非零值,否则返回零。 函数名: toascii 原型:extern int toascii(int c);

02
领券