字符串分割SplitString

C/C++中常用的字符串切割函数有strtok、strtok_s与strtok_r。

strtok函数

char* strtok(char* str, const char* delim);

分解字符串str为一组字符串,delim为分隔符。当strtok在參数str的字符串中发现參数delim中包含的切割字符时,则会将该字符改为'\0'字符。在第一次调用时,strtok必需给予參数str字符串,往后的调用则将參数str设置成NULL。每次调用成功则返回指向被切割出片段的指针。

strtok_s函数

char* strtok_s( char* strToken, const char* strDelimit, char** buf);

strtok_s是windows下的一个切割字符串安全函数,该函数会将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。

strtok_r函数

char* strtok_r(char* str, const char* delim, char** saveptr);

strtok_r函数是linux下切割字符串的安全函数,该函数会破坏待分解字符串的完整性,可使其将剩余的字符串保存在saveptr变量中,保证了安全性。

SplitString实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void SplitString (char* str, char* delim, char** result) {
    char* ptr = NULL;
    char* tmp = NULL;
    
    ptr = strtok_r(str, delim, &tmp);
    
    int count = 0;
    const int maxLineLen = 100;
    
    while (ptr != NULL) {
        memcpy(result[count], ptr, maxLineLen);
        ptr = strtok_r(NULL, delim, &tmp);
        ++count;
    }
}

void SplitStringTest () {
    
    const int maxLineNum = 20;
    const int maxLineLen = 100;
    
    char str1[] = "This is a test Program!";
    // char str1[] = "Indulge not in heedlessness, have no intimacy with sensuous delights; for the earnest, meditative person obtains abundant bliss.";
    char str2[] = " ";
    char* result[maxLineNum] = {0};
    
    for (int i = 0; i < maxLineNum; ++i) {
        result[i] = (char*)malloc(sizeof(char) * maxLineLen);
        
        if (result[i] != NULL) {
            memset(result[i], 0, maxLineLen);
        } else {
            return;
        }
    }
    
    SplitString(str1, str2, result);
    
    for (int i = 0; i < maxLineNum; ++i) {
        printf("%s\n", result[i]);
    }
    
    for (int i = 0; i < maxLineNum; ++i) {
        if (result[i] != NULL) {
            free(result[i]);
            result[i] = NULL;
        }
    }
}

int main () {
    SplitStringTest();
    
    return 0;
}

个人主页:

www.codeapes.cn

原文链接: https://www.cnblogs.com/codeapes666/p/12089156.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    字符串分割SplitString

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/308337

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午5:57
下一篇 2023年2月16日 上午6:01

相关推荐