请问如何截取字符串两部分数据???以下是我的小代码!本帖最后由 qinghian 于 2013-04-18 16:20:37 编辑#inc
请问如何截取字符串两部分数据???以下是我的小代码!
本帖最后由 qinghian 于 2013-04-18 16:20:37 编辑 #include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string s = "11234&LJLFKJ093J4ROIUR023U00";
string addnum = "";
char *a;
a=(char *) s.c_str();
char *pMiddle = strstr(a, "&");
pMiddle += 1;
s = pMiddle;//获取了&后面的数据,请问我如何才能把&前面的数据11234取出来!
printf("%s", pMiddle);
system("pause");
return 0;
}
请问char *a和char b[];的区别是什么?
[解决办法]
char *pMiddle = strstr(a, "&");// 楼主这样搞不大好,最好得给pMiddle“买栋房子"
int iPos = 0;
char cStr[40] = {0} ; // 保存楼主所言前面的数据11234
iPos = strlen(a) - strlen(pMiddle);
memcpy(cStr, a, iPos);// 前面的数据11234取出来!
[解决办法]
string d = s.substr(0 ,s.find("&") ); // 找到"&"的位置,然后从第0个开始取,取"&"位置个就是&前边的字符
char *a;表示a是一个字符指针,char b[] = “xxx”;表示定义了一个字符数组,数组名字叫b,长度是根据初始化的那个字符串计算出来的,指针和数组名的区别可以搜索“指针 数组名”
[解决办法]
问题在于
char *a;这里使用了强制类型转换,本来c_str()返回的是一个常量字符指针,应该是string做的一种保护机制,你的pMiddle指向的也是string中的字符地址,所以当s=pMidlle后相当于pMiddle相对向后移动了前边那么长的偏移,所以跑到那个'0'上了,你试试把上边的代码改成这个
a=(char *) s.c_str();
char a[100] = {0};
strcpy(a, s.c_str());pMiddle就不会受s的影响了
[解决办法]
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) {
k=sscanf(p,"%d%n",&v,&n);
printf("k,v,n=%d,%d,%d\n",k,v,n);
if (1==k) {
p+=n;
} else if (0==k) {
printf("skip char[%c]\n",p[0]);
p++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
------解决方案--------------------
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string s = "11234&LJLFKJ093J4ROIUR023U00";
//string addnum = "";
char *a;
a=(char *) s.c_str();
char *pMiddle = strstr(a, "&");
//pMiddle += 1;
//s = pMiddle; //<<< 不改变s!!!
*pMiddle++ = '\0'; //<<< 从中间截断
printf("%s", a); //a 前半部: 11234
printf("%s", pMiddle); //pMiddle 后半部: LJLFKJ093J4ROIUR023U00
system("pause");
return 0;
}
