首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CString的Delet()和Left(),该怎么处理

2012-05-21 
CString的Delet()和Left()file.Open(IP_ROOM.txt,CFile::modeRead)CString str//存放文本内容char* pB

CString的Delet()和Left()
file.Open("IP_ROOM.txt",CFile::modeRead);
  CString str;//存放文本内容
char* pBuf;//动态数组存放文件内容
pBuf=new char[file_length+1];
pBuf[file_length]=0;//将数组最后一位设置为结束符
file.Read(pBuf,file_length);
str=pBuf;
  file.Close();


if(str.Find("\r\n",0)!=-1)//查询换行符"\r\n"的第一个字符索引,从0开始,若不存在则返回-1
{
n=str.Find("\r\n",0);
  //TXT文件中,字符存放格式:3#101 111.121.121.121 yes房间号,IP,yes都用空格“ ”间隔开
  //查找房间号字符串
f=str.Find(" ",0);
str_room=str.Left(f);
str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号

  //查找IP号字符串
  f=str.Find(" ",0);
str_ip=str.Left(f);
str=str.Delete(f,str_ip.GetLength());//从str字符串删除IP
   
  //查找yes
f=str.Find("\r\n",0);
isOpen=str.Left(f);
  str=str.Delete(f,isOpen.GetLength());///从str字符串删除yes

  //第一列要用InSertItem(),插入所添加或删除的房间号
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,str_room);//0行0列

  //将第1行第二列的值设置为所添加或删除房间的IP地址//0行,1列
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,str_ip);
  //是将第1行第三列的值设置为所添加或删除房间的isOpen//0行,2列
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 2,isOpen);

  UpdateData();
}
但是结果却是只有列表0行0列有插入数据,第1列和第2列没有插入数据
  难道str.Delete()后CString的索引不变?
如果不用CString::Delet(),CString::Left()还有什么办法

[解决办法]
CString类的Delete函数是这样的:
int Delete(int nIndex, int nCount)
删除字符,删除从下标nIndex开始的nCount个字符

你得数据是这样3#101 111.121.121.121 yes
程序中:
f=str.Find(" ",0);
str_room=str.Left(f);
str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号
这个地方你并没有删除房间号,你只是把IP中的前str_room.GetLength()个字符给删除了。程序中后面的几个删除也是一样的问题。
[解决办法]
yes前面首先还有个\r\n啊,然后\r\n前有几个空格呢?
你Find的是第一个空格,但yes并不是在这个空格之后,后面还有其它字符呢,所以光+1肯定不行啊

热点排行