C语言 双字节字符串分割

假设现在有字符串:“有关术语和定义、样品的制作原理、样品的制作、评价方法”
我想以其中的"品"字为分隔符号,将该字符串分解成
“有关术语和定义、样”
“的制作原理、样”
“的制作、评价方法”
麻烦提供意见!
[133 byte] By [wellsub-踏雪无痕] at [2008-1-9]
# 1
int main()
{
char s[] = "有关术语和定义、样品的制作原理、样品的制作、评价方法";
char fg[] = "品";
char *p[1000];
int n = 0;
int i = 0;
p[n++] = s;
while((p[n]=strstr(p[n-1],fg))!=NULL)
{
if(p[n] == p[n-1])
{
--n;
}
*p[n] = '\0';
p[n++] += 2;
}
for( i=0; i<n; ++i)
{
printf("%s\n",p[i]);
}
system("pause");
return 0;
}
alainpro-Alain at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 2
学习中...
zeuskaaba-Z.Joke at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 4
char* split(char *s,char *t)
分成数组
xmxoxo-xmxoxo at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 5
wchar_t s[] = L"有关术语和定义、样品的制作原理、样品的制作、评价方法";
wchar_t c=L'品';
wchar_t* p=wcschr(s,c);
# 6
楼上的好象编译有错
efatal error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol _WinMain@16
mingxuan20 at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 7
if(p[n] == p[n-1])
{
--n;
}
1楼的这段代码是什么意思?可不可以不要哦?
lorenzo13 at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 8
===================================================
lorenzo13() ( ) 信誉:100 Blog 2006-12-31 16:43:05 得分: 0

if(p[n] == p[n-1])
{
--n;
}
1楼的这段代码是什么意思?可不可以不要哦?
====================================================
防止产生空串.
当分隔符在原字符串首位或两个分隔符相连时,会导致某个p[n-1]字符串的首位是分隔符,如果直接进行下面的*p[n] = '\0'操作,p[n-1]就成了空串.所以要退回去把p[n-1]向后移.
alainpro-Alain at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 9
发现没有处理末尾是分隔符的情况,粗心啊。这些特殊情况处理起来真让人头疼。
补上了:
int main()
{
char s[] = "有关术语和定义、样品的制作原理、样品的制作、评价方法";
char fg[] = "品";
char *p[1000];
int n = 0;
int i = 0;
p[n++] = s;
while((p[n]=strstr(p[n-1],fg))!=NULL)
{
if(p[n] == p[n-1])
{//分隔符在字符串开始位置或两个分隔符相连时
--n;
}
*p[n] = '\0';
p[n++] += 2;
}
if(*p[n-1]=='\0')
{//当分隔符在字符串最后时
--n;
}
for( i=0; i<n; ++i)
{
printf("%s\n",p[i]);
}
system("pause");
return 0;
}
alainpro-Alain at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 10
如果字符串是汉字字母混合呢?
# 11
1 汉字是两个字符。所以alainpro的做法不对。
2 weiym(磨刀霍霍向猪羊) 编译错误是因为变异模式不对。
用console编译模式。如果找不到,干脆自己写一个查找。
int search(char* s,char* d)//find d in s .d is wchar
{
for(int i=0;i<strlen(s);i+=2)
{
if(s[i]==d[0] &&s[i+1]==d[1])
{
return i;
}
}
return -1;//not found
}
# 12
weiym,alainpro的方法应该都可以吧.alainpro可以测试通过的
YoungBee611-SmoothRun at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 13
使用UNICODE
一、定义UNICODE/_UNICODE
在Project Setting中的C/C++页中,Preprocessor definitions里面,添加上UNICODE与_UNICODE,

注意:在程序中通过#define UNICODE;#define _UNICODE 定义是没有用的

二、修改程序入口
在Project Setting中的Link页中,选择Output,将Entry-point改为wWinMainCRTStartup

renzaijiang at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 14
_tcstok函数

char *strtok(
char *strToken,
const char *strDelimit
);
wchar_t *wcstok(
wchar_t *strToken,
const wchar_t *strDelimit
);
unsigned char *_mbstok(
unsigned char*strToken,
const unsigned char *strDelimit
);
vanter-vanter at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...