纯C的函数

用了太久c++了,有些惯用的函数不能用了,只能够自己再写它出来实现吧

 

//写下linux的shell

int32_t myexec(const char *cmd) {
    int size=0;
    FILE *pp = popen(cmd, "r");
    if (!pp) {
        return -1;
    }
    char tmp[1024];
    while (fgets(tmp, sizeof(tmp), pp) != NULL) {
        if (tmp[strlen(tmp) - 1] == '\n') {
            tmp[strlen(tmp) - 1] = '\0';
        }
        size++;
    }
    pclose(pp);
    return size;
}
//例如,myexec(”ls”);就是相当于打下linux的shell,ls语句

//字符串相加=s1+s2

char *str_cat(char *s1,char *s2) {
    char *s = (char *)malloc(strlen(s1) + strlen(s2) + 1);
    char *ps = s;
    while(*s++ = *s1++);
    --s;
    while(*s++ = *s2++);
    return ps;
}

//例如,s3=str_cat(s1,s2)

 

//字符串分割

//1.首先建立一个字符串组结构

typedef struct strtokStruct {
    char** str;//字符串组
    int strLen;//字符数组的大小
} strtokStruct_t;

//2.分割函数

strtokStruct_t strtokStr(const char *str,const char *pch)
{
    strtokStruct_t strtokStruct_p;
    char* checkLenStr=strdup(str);

    strtokStruct_p.strLen=0;
    char *pCheckStr;

    pCheckStr=strtok(checkLenStr, pch);
    strtokStruct_p.strLen++;
    if(strlen(pCheckStr)<=0)
    {
        return strtokStruct_p;
    }

    while(pCheckStr = strtok(NULL, pch))
    {
        strtokStruct_p.strLen++;
    }

    strtokStruct_p.str=(char **)malloc(sizeof(char*)*strtokStruct_p.strLen);
    int iStr=0;
    char *pStr;

    char* checkStr=(char*)malloc(strlen(str)+1);
    strcpy(checkStr,str);

    pStr=strtok(checkStr, pch);
    strtokStruct_p.str[iStr]=(char*)malloc(strlen(pStr)+1);
    strtokStruct_p.str[iStr]=pStr;
    //printf("%s ", strtokStruct_t.str[iStr]);
    iStr++;

    while(pStr = strtok(NULL, pch))
    {
        strtokStruct_p.str[iStr]=(char*)malloc(strlen(pStr)+1);
        strtokStruct_p.str[iStr]=pStr;
        //printf("%s ", strtokStruct_t.str[iStr]);
        iStr++;
    }
    /*for(int i=0;i<strtokStruct_p.strLen;i++)
    {
        printf("%s ",strtokStruct_p.str[i]);
    }
    printf("\n");
    printf("strtokStruct_t.strLen:%d",strtokStruct_p.strLen);*/
    return strtokStruct_p;
}

/*实现例子

  strtokStruct_t strtokStruct_p;
        strtokStruct_p=strtokStr("123,456,789",",");
        for(int j=0;j<strtokStruct_p.strLen;j++)
        {
            char * test=(char*)(strlen(strtokStruct_p.str[j])+1);
            test=strtokStruct_p.str[j];

           printf("test:%s ",test);
        }

*/实现例子 //结果:123 456 789

posted @ 2018-03-29 10:46  橙子好甜  阅读(169)  评论(0编辑  收藏  举报