下面是我以前写的一个用分隔符提取字段的例子,你改改判断条件应该可以用的统计字符的多少可以用int i = strlen()判断大小来确定。
说明:假设给出的字符串input是(a sf asf as dfs)分隔符deli是空格( ),要求第几个是index;输出是outbufy,输出块大小是outbuflen,如果index是0则输出a,index是2则输出asf,你把判断条件改成你的就可以了。
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include "mydisjoin.h"
int GetPart(char *input, char deli, int index, char *outbufy, int outbuflen);
int main(void)
{
int i;
int j;
char out[30];
for(i = 0; i < 30; i++)
{
out[i] = 0;
}
for (j = 0; j < 2; j++)
{
i = GetPart(" sf asf as dfs", ' ', j, out, sizeof(out));
printf("\n结果:(%s)", out);
printf("\n返回值:(%d)",i);
}
return 0;
}
/*
//1: no deli
//0: 正确
//-1 : no input
//-2 : index < 0
//-3 : index too large
//-4 : 第一个就是deli而且要求deli=0
*/
int GetPart(char *inputx, char deli, int index, char *outbufy, int outbuflen)
{
bool stop = true;
int delinum;//deli的数目
int x_num = 0;//变化的deli数目
int y_len = 0;//要拷贝的输出字符串的长度
char *xautop = inputx;
char *lockp = xautop;
if (inputx == NULL)
{
return -1;
}
if (index < 0)
{
return -2;
}
while (*xautop != '\0')
{
if (*xautop == deli)
{
x_num++;
}
xautop++;
}
delinum = x_num;
if (index > delinum)
{
strcpy(outbufy, "");
return -3;
}
x_num = 0;
xautop = inputx;
while ((x_num - 1) != index)
{
if((*inputx == deli) && (index == 0))
{
return -4;
}
if (*xautop == deli)
{
x_num++;
}
if ((x_num == index) && (stop))
{
lockp = xautop;
if (*lockp == deli)
{
lockp++;
}
if (*xautop == deli)
{
xautop++;
}
y_len = 0;
stop = false;
}
if (*xautop == '\0')
{
y_len++;
break;
}
xautop++;
y_len++;
}
if (x_num ==0)
{
return 1;
}
strncpy(outbufy, lockp, (y_len - 1));
outbufy[y_len - 1] = '\0';
return 0;
};
努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。