C语言 截取文本 中 的 引号之间的单词 或者是 汉字 有什么好办法?

xxxiaoxiami 2008-07-24 08:16:18
之前曾发过一个帖子 问的是关于 :我爱背单词,这个dos环境下 的背单词程序,在很多人 的指导下 我的 思路现在已经非常清晰了
但是具体到细节上 还哟一些很核心的问题没有解决!
5 "a bit of" "一点" 0
型如上,
就是说 怎么方便快捷的截取 两对引号之间的 单词或者是汉字,然后保存到数组中去?
(存储信息,我定义的是结构体数组)
这是这个程序的关键 可是 我至今还没有找到一个合适的方法来
所以还要在这里麻烦大家 给出处主意!
...全文
217 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin_style 2008-07-24
  • 打赏
  • 举报
回复
最好还是用分割之类的函数和sscanf结合
因为单词行可能是动态的,可以先分割成自己指定的顺序,然后再用sscanf割
lxl843 2008-07-24
  • 打赏
  • 举报
回复
c#里面有个split函数可以实现这个功能
这个是用C++写的split函数


//+------------str is the String that will be split---------------+//
//+------------bystr is the string by which to split str----------+//
//+------------str_array is the array to save splited str---------+//
void split(const CString str,const CString bystr,CStringArray *str_array)
{
int nLen = bystr.GetLength();
int preLoc = 0;
int nowLoc = 0;
while(true)
{
nowLoc = str.Find(bystr,preLoc);
if(nowLoc == -1&&preLoc == 0)
{
CString substr3=str;
str_array->Add(substr3);
break;
}
if(nowLoc == -1&&preLoc != 0)
{
CString substr2=str.Mid(preLoc);
str_array->Add(substr2);
break;
}
CString substr = str.Mid(preLoc,nowLoc-preLoc);
str_array->Add(substr);
preLoc=nowLoc + nLen;
}
}
lynkoo 2008-07-24
  • 打赏
  • 举报
回复
使用strtok
  • 打赏
  • 举报
回复
用ssanf或者fscanf
dbger 2008-07-24
  • 打赏
  • 举报
回复
_tcscpyn->_tcsncpy
dbger 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbger 的回复:]
C/C++ codeTCHAR*szTest=_T("5 \"a bit of\" \"一点\" 0");

TCHAR*p1=szTest,*p2=NULL;while( p1=_tcschr(p1, _T('\"'))
{
p2=_tcschr(p1, _T('\"'));if(p2)
{
TCHAR*pWord=newTCHAR[p2-p1+1];//单词_tcscpyn(pWord, p1, p2-p1);//使用完记得deletep1=p2+1;
}else{break;
}
}
[/Quote]

_tcscpyn->tcsncpy
dbger 2008-07-24
  • 打赏
  • 举报
回复

TCHAR *szTest = _T("5 \"a bit of\" \"一点\" 0 ");

TCHAR *p1 = szTest, *p2 = NULL;
while ( p1 = _tcschr(p1, _T('\"'))
{
p2 = _tcschr(p1, _T('\"'));
if (p2)
{
TCHAR *pWord = new TCHAR[p2-p1 + 1]; // 单词
_tcscpyn(pWord, p1, p2-p1); // 使用完记得delete
p1 = p2 +1;
}
else
{
break;
}
}


languagec 2008-07-24
  • 打赏
  • 举报
回复
#include "stdio.h"

int main()
{
char buf[]="\"adsfasdf\"fasdf\"sdfasdf\"dsfasdfa\"dsfasd\"";
int i=0;
int Qua=0;
while(buf[i])
{
if(buf[i]=='\"')
Qua=(Qua+1)%2;
if(Qua&&buf[i]!='\"')
printf("%c",buf[i]);
i++;
}
return 0;
}
dbger 2008-07-24
  • 打赏
  • 举报
回复
直接在字符串中查找"号,找到后继续查找接下来的"号,两个引号见为所需要的字符串。
重复此过程直到结束。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧