C++ 中如何求子字符串函数?

例如:要返回一个字符串前4个字符,或是后4个字符,或者中间几个字符?

//以下代码含char[]数组和base_string两种实现方式
#include <iostream>
#include <string> //base_string库
#include <cstring> //C语言的string.h库
using namespace std;

char * substr(char *dest, char *src, long head, size_t n)
{
strncpy(dest,&src[head],n);
dest[n] = '\0';
return dest;
}

int main()
{
char cstr_org[32]={"ABCDEFGHIJGKLMNOPQRSTUVWXYZ"};
char cstr_new[32];
string str_org=cstr_org;
string str_new;

//字符数组char[]实现
substr(cstr_new,cstr_org,0,4);//前四个字符
cout<<cstr_new<<endl;
substr(cstr_new,cstr_org,7,4);//中间四个字符(从[7]开始)
cout<<cstr_new<<endl;
substr(cstr_new,cstr_org,strlen(cstr_org)-4,4);//后四个字符
cout<<cstr_new<<endl;

//base_string字符串实现
str_new=str_org.substr(0,4);//前四个字符
cout<<str_new<<endl;
str_new=str_org.substr(8,4);//中间四个字符(从[7]开始)
cout<<str_new<<endl;
str_new=str_org.substr(str_org.length()-4,4);//后四个字符
cout<<str_new<<endl;

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-07
char* pContent = "12345678";

//后几位
for(int i=0; i<4; i++)
{
pContent++;
}

//前几位,或者中间几位
pContent = "12345678";
char* pResult = new char[5];
memset(pResult, 0, 5);
for (int i=0; i<4; i++)
{
pResult[i] = *pContent; //这里是从第一位开始赋值,你也可以从中间某位开始
pContent++;
}

//算了,中间的也给你看下吧
pContent = "12345678";
memset(pResult, 0, 5);
int iIndex = 0;
for (int i=0; i<8; i++)
{
if (i>=3 && i<=6)
{
pResult[iIndex] = *pContent;
iIndex++;
}
pContent++;
}
cout<<pResult<<endl;本回答被网友采纳
第2个回答  2010-12-08
嘿嘿,这是我自己写的一个函数,希望对你有用

//构造截取子串函数,start从零开始.
char *get_substr(char *strDest,int start,int end)
{
if(start>end)
return NULL; //如果开始位置大于结束位置则返回
char *subStr; //字串指针
subStr=(char*)malloc((end-start+2)*sizeof(char));
int i;

for(i=start;i<=end;i++)
subStr[i-start]=strDest[i];

subStr[end-start+1]='\0';
return subStr;
}
第3个回答  2010-12-07
翻库函数,STL有很多函数,什么获取子串的、查找位置、获取字符串长度的等等。
MFC中CString也有很多成员函数,都有这功能。
相似回答