我想作一个接口来处理字符串分离的问题,比如输入wo3shi4zhong1guo2ren2现在需要把拼音串和声调分离开,再把声母和韵母分离开,最后给声韵母和声调分配人发音时的时长,比如说s是232ms,i是176ms,诸如此类给分离后的声韵母和声调一一对应起来,具体各个时长可以假设一下,我只要知道方法就行了,假如用单文档来做,用CEditView为基类,在客户区输入上述,我要怎么处理??
急!望高手指点!望哪位高人师傅可以给一下源代码演示,不胜感激!仅以100分作为回报!
谢谢。
急!望高手指点!望哪位高人师傅可以给一下源代码演示,不胜感激!仅以100分作为回报!
谢谢。
解决方案 »
- 基于vc的mapgis二次开发问题
- 请问如何才可以实现多窗口鼠标键盘同步操作?
- 最简单的静态库引用,提示未定义.哪里有问题HELP
- 哪里有Cjlibrary的使用说明?
- 【急】基于对话框的MFC,在VS2008平台下自己嵌入一个菜单。加入Skin++皮肤后菜单栏现实不出来
- 请教:关于CWebBrowser2类的函数void Navigate()和void Navigate2()的问题???
- 长连接如何解决套接子阻塞问题???
- 关于VB写的COM在VC中调用的问题(如何调用啊)
- 请教高手!!
- 请问我如何才能让用户在clistview中编辑CListCtrl中的每一个单元的内容。
- matlab做的程序如何用到vc中
- 中国哪个城市的计算机学习氛围好?来着有分
特别说明:本程序由王老师于2000年编写
*******************************************************************************/
#ifndef _CParseString_H_
#define _CParseString_H_//字符串解析
class CParseString:public CObject
{
private:
int pos,len;
public:
CString string,separator;
public:
void SetString(CString str,CString sep=_T(" ,\t"));
void GetData(CString &s);
bool GetData(double &f);
bool GetData(int &n);
bool GetData(char &ch);
};#endif //_CParseString_H_
//实现
#include "stdafx.h"
#include "parsestring.h"void CParseString::SetString(CString str,CString sep)
{
string=str;
separator= sep;
pos=0;
}
void CParseString::GetData(CString &s)
{
string.TrimLeft(' ');
string.TrimLeft(',');
string.TrimLeft('\t');
pos=string.FindOneOf(separator);
if(pos>=0) s=string.Left(pos);
else s=string;
string.Delete(0,s.GetLength());
}
bool CParseString::GetData(double &f)
{
CString ss;
string.TrimLeft(' ');
string.TrimLeft(',');
string.TrimLeft('\t');
pos=string.FindOneOf(separator);
if(pos>=0) ss=string.Left(pos);
else ss=string;
string.Delete(0,ss.GetLength());
if(ss.IsEmpty()) return false;
f=atof(ss);
return true;
}
bool CParseString::GetData(int &n)
{
CString ss;
string.TrimLeft(' ');
string.TrimLeft(',');
string.TrimLeft('\t');
pos=string.FindOneOf(separator);
if(pos>=0) ss=string.Left(pos);
else ss=string;
string.Delete(0,ss.GetLength());
if(ss.IsEmpty()) return false;
n=atoi(ss);
return true;
}
bool CParseString::GetData(char &ch)
{
CString ss;
string.TrimLeft(' ');
string.TrimLeft(',');
string.TrimLeft('\t');
pos=string.FindOneOf(separator);
if(pos>=0) ss=string.Left(pos);
else ss=string;
string.Delete(0,ss.GetLength());
if(ss.IsEmpty()) return false;
ch=ss[0];
return true;
}这里你可以定义分割字符为“1234”
#define TONE_DELIM " abcdefghijklmnopqrstuvwxyz:;,.?!:;,。?!ABCDEFGHIJKLMNOPQRSTUVWXYZ"
void SyllableToneSeparation(char *PINGYIN){
char chunk[128],syllable[64][10];
char *buf;
char *tok;
int i,j,tone[64];
/* seperate syllables from each chunk */
strcpy(chunk,PINGYIN);
for(j = 0, buf = chunk, tok = strtok(buf,SYLL_DELIM); tok; tok = strtok(0,SYLL_DELIM), j++){
strcpy(syllable[j],tok);
} /* seperate tones from the chunk */
strcpy(chunk,PINGYIN);
for(j = 0, buf = chunk, tok = strtok(buf,TONE_DELIM); tok; tok = strtok(0,TONE_DELIM), j++){
tone[j] = atoi(tok);
}
}
这是分离拼音串和声调的函数,下面的就不会了。谁给接着写完?想想分离声韵母还用这种形式不太好了,请高人指点!
{
CParseString cp;
CString str,sep;
CStringArray spellA,sTuneA;
CUIntArray tuneA;
// str="wo3shi4zhong1guo2ren2";
GetSelectedText(str);
sep="1234";
while(!str.IsEmpty()){
CString sTemp;
cp.SetString(str,sep);
cp.GetData(sTemp);
spellA.Add(sTemp); UINT nTemp;
str=cp.string;
sTemp=str.Left(1);
nTemp=atoi(sTemp);
str.Delete(0);
tuneA.Add(nTemp);
sTuneA.Add(sTemp);
} CClientDC dc(this);
int x=200,y=200;
dc.TextOut(x,y,"拼写 声调");
for(int i=0;i<spellA.GetSize();i++){
y+=20;
CString sText=spellA[i];
sText+=" ";
sText+=sTuneA[i];
dc.TextOut(x,y,sText);
}
}我觉得分离声母和韵母利用这个办法也完全可以分开,只不过麻烦一些
乙方: Saimen
甲方提出编写代码要求:
输入 wo3shi4zhong1guo2ren2
现在需要
1。把拼音串和声调分离开,
2。再把声母和韵母分离开,
3。最后给声韵母和声调分配人发音时的时长, 例如:s是232ms,i是176ms,诸如此类
给分离后的声韵母和声调一一对应起来入口参数要求:
输出要求:
其它要求:
乙方完成后,甲方给乙方200分,(估计你也加不了200分,最少100)为防止完成代码功能上的纠纷,请甲方更详细描述要求