请教怎么截取字符串两部分数据?以下是小弟我的小代码

请问如何截取字符串两部分数据???以下是我的小代码!本帖最后由 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,长度是根据初始化的那个字符串计算出来的,指针和数组名的区别可以搜索“指针 数组名”
[解决办法]
引用:
引用:
string d = s.substr(0 ,s.find("&amp;amp;") );  // 找到"&amp;amp;"的位置,然后从第0个开始取,取"&amp;amp;"位置个就是&amp;amp;前边的字符
char *a;表示a是一个字符指针,char b[] = “xxx”;表示定义了一个字符数组,数组名字叫b,长度是根据初始化的那个字符串……
问题在于
char *a;
a=(char *) s.c_str();
这里使用了强制类型转换,本来c_str()返回的是一个常量字符指针,应该是string做的一种保护机制,你的pMiddle指向的也是string中的字符地址,所以当s=pMidlle后相当于pMiddle相对向后移动了前边那么长的偏移,所以跑到那个'0'上了,你试试把上边的代码改成这个
    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;
}