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

C++字符串处理,该怎么处理

2012-02-17 
C++字符串处理假设有这样的一个字符串:CString str AA,3,1,2现在定义了如下一些变量:char *nameint a

C++字符串处理
假设有这样的一个字符串:
CString str = "AA,3,1,2"
现在定义了如下一些变量:
char *name;
int a;
int b;
int c;
我想把str的内容以","分解成如下格式并且赋值给相应的变量
得到的结果如下
我该怎么做??
name = "AA"
a = 3;
b = 1;
c = 2;
希望C++高手指点下

谢谢了啊~~~

[解决办法]
To 楼上:是CString 不是string,所以没有find_first_of方法可用

CString temp;
int pos = 0;
int tmp = 0;
vector<CString> v_str;
while(pos!=-1)

pos = str.Find(",",pos);
temp = str.Mid(tmp,pos-tmp);
v_str.push_back(temp);
}
CString用的不熟,大概这样就可以将字符拆分开,然后该怎么转怎么转了.
[解决办法]
TO 楼上 find_first_of 是乏型算法
[解决办法]
char* p = "AA,1,2,3";
char name[64] = {0};
int a, b, c;
sscanf(p, "%[^,],%d,%d,%d", name, &a, &b, &c);
[解决办法]
给楼主一段我的代码,经多方测试,已应用与工程中。
考虑到效率问题,没有用到string类,可以自己修改

C/C++ code
 
/**********************************************************************
* 字符串分割函数,通过new分配新内存保存分割后的字符串数组,使用过后必须手动回收内存
* 返回值为分割后的字串列个数
***********************************************************************/
size_t split(LPCTSTR lpszSrc, LPCTSTR lpszToken, vector <LPTSTR>& vstr, size_t count)
{
if(!lpszSrc)
{
return 0;
}
LPCTSTR p1 = lpszSrc;
LPCTSTR p2;
LPCTSTR pend = p1 + count;
LPTSTR ptmp;
size_t len;
size_t tokenlen = _tcslen(lpszToken);
for( ; p1 < pend; )
{
// 排除最后一个字符(串)就是token的情况, 如 "a,b,,c,,", (","为token)
if(p1 == pend)
{
LPCTSTR p = p1 - tokenlen;
if( _tcsncmp( p, lpszToken, tokenlen ) == 0 )
{
ptmp = new TCHAR[1];
ptmp[0] = _T('\0');
vstr.push_back(ptmp);
}
break;
}

p2 = _tcsstr(p1, lpszToken);
if(!p2 || p2 >= pend)// 未找到或找到但已超出了范围,前端整体为一串,否则,继续划分
{
len = pend - p1;
}
else
{
len = p2 - p1;
}
ptmp = new TCHAR[len + 1];
if(!ptmp)
{
//printf("outofmemory.\n");
break;
}
_tcsncpy(ptmp, p1, len);
ptmp[len] = _T('\0');
vstr.push_back(ptmp);
p1 += len + tokenlen;
}
return vstr.size();
}

/**********************************************************************
* 回收内存并销毁分割字符串数组
* 使用split()函数分割字串后,必须手动回收内存
* 或者调用此函数回收内存,以免造成内存泄露
***********************************************************************/
void freevstr(vector <LPTSTR>& vstr)
{
for(vector <LPTSTR>::iterator itr = vstr.begin(); itr < vstr.end(); itr++)
{
if(*itr)
{
delete [] (*itr);
}
}
vstr.clear();
}

[解决办法]
C/C++ code
#include <iostream>#include <string>#include <stdlib.h>using namespace std;int main(){    string str = "AA,3,2,1";    char p[10];    const char* p1 = str.c_str();    char* name = NULL;    int flag = 0;    int index = 0;    int a, b, c;    int i;    for(i = 0; i < str.size(); i++)    {        if(str[i] != ',')        {            p[index++] = p1[i];        }        else        {            p[index] = '\0';            if(flag == 0)            {                name = p;                name[index] = '\0';                cout << name << endl;            }            else if(flag == 1)            {                sscanf(p, "%d", &a);                cout << a << endl;            }            else            {                sscanf(p, "%d", &b);                cout << b << endl;            }            ++flag;//            p = NULL;            index = 0;        }    }    p[index] = '\0';    sscanf(p, "%d", &c);    cout << c << endl;    system("pause");    return 0;} 

热点排行