C语言自编字符串处理函数——字符串分割、字符串填充等

文章目录

  • 字符串填充使用示例
  • 字符串分割使用示例
  • 工具函数代码

字符串填充使用示例

#include 
#include 

#include "CStringTools.h"

int main()
{
    char cmd[1000];
    char cmdList[50][20];

    while (1)
    {
        gets(cmd);
        if (strcmp(cmd, "exit") == 0)
            break;

        fillWithKeys(cmd, "*#", ' ');

        printf("%s\n\n", cmd);
    }

    return 0;
}

C语言自编字符串处理函数——字符串分割、字符串填充等_第1张图片

字符串分割使用示例

#include 
#include 

#include "CStringTools.h"

int main()
{
    char cmd[1000];
    char cmdList[50][20];

    while (1)
    {
        gets(cmd);
        if (strcmp(cmd, "exit") == 0)
            break;

        int cnt = split(cmdList, cmd, "*#");
        for (int i = 0; i < cnt; ++i)
            printf("%d\t\t%s\n", i+1, cmdList[i]);

        printf("\n");
    }

    return 0;
}

C语言自编字符串处理函数——字符串分割、字符串填充等_第2张图片

工具函数代码

有.h和.c两个文件,将其加入到你的项目中,并且#include “CStringTools.h”,既可以使用其中的功能。

// CStringTools.h文件


#ifndef CSTRINGTOOLS_H_INCLUDED
#define CSTRINGTOOLS_H_INCLUDED

#include 
#include 

//在str指定字符keys前后填充一个content
void fillWithKeys(char *str, char* keys, char content);

//将字符串str按照分隔符keys分割成strList(上限50个字符串 长度20)
//返回实际分成的字符串的数量
int split(char strList[][20], char *str, char *keys);

#endif // CSTRINGTOOLS_H_INCLUDED
// CStringTools.c文件


#include "CStringTools.h"

void fillWithKeys(char *str, char* keys, char content)
{
    char *tmp = (char *)malloc(sizeof(char) * strlen(str));
    strcpy(tmp, str);

    int index = 0;
    for (int i = 0; i < strlen(tmp); ++i)
    {
        int flag = 0;
        for (int j = 0; j < strlen(keys); ++j)
        {
            if (keys[j] == tmp[i])
            {
                flag = 1;
                break;
            }
        }

        if (flag)
            str[index++] = content;
        str[index++] = tmp[i];
        if (flag)
            str[index++] = content;
    }
    str[index] = '\0';

    free(tmp);
}

int split(char strList[][20], char *str, char *keys)
{
    int cnt = 0;

    str[strlen(str)] = keys[0];
    str[strlen(str)] = '\0';

    int start = -1;
    for (int i = 0; i < strlen(str); ++i)
    {
        int flag = 0;
        for (int j = 0; j < strlen(keys); ++j)
        {
            if (keys[j] == str[i])
            {
                flag = 1;
                break;
            }
        }

        if(flag)
        {
            if (i - start > 1)
            {
                //切割[start+1,i-1]
                for (int j = start + 1; j <= i - 1; ++j)
                {
                    strList[cnt][j-start-1] = str[j];
                }
                strList[cnt][i - start - 1] = '\0';
                ++cnt;
            }
            start = i;
        }
    }

    return cnt;
}

你可能感兴趣的:(算法,c语言)