c++谁帮我做个关于“正则表达式”的函数?

要求:函数名char*httpcutfun(char*,char*,char,char)其中三个参数分别是:1整个字符串。如:123abc132abc1234.abc"1... 要求:函数名char* httpcutfun(char* ,char*,char ,char)
其中三个参数分别是:1整个字符串。如:123abc132abc1234.abc"121"
2起始字符串。如123如果没找到就返回NULL
3找到始字符串后如果有特定个字符就开始从此截取,如 a ,如果没有找到就返回NULL
4,如果遇遇到此字符就终止截取,如 a
并返回 被截取的字符串 如 bc132
谢谢了。100+50分给你
第一点修正:是四个参数

第四点修正:从开始截取的那个标识字符的后一个字符开始,如果遇到特定的字符就返回两个特定字符之间的字符串,如果直到字符串最后也没找到需要终止的字符,也返回NULL。
的五点:前面四点中所提到的四个变量相对于四个传入参
数。
顺便说一下,一楼和2楼的都有问题(我是新手,不好说哈。)
再说一下。如果传入的参数是:"1abcdefg2fgjklmn3opq123","fg"
'j','o',
应该返回的是:jklmn3

PS:没有原题,一句话解释就是:先找到起始字符串,然后看起始字符串后面有没有匹配字符和结束匹配字符。如果有就截取从起始字符开始到结束匹配字符。最好别写在MAIN函数里面,避免修改(我新手,修改要花很多时间)谢谢了,如果还能加分我还送。(都怪我学艺不精,不然我自己都可以编了)
展开
 我来答
confuciuskg
推荐于2016-10-14 · TA获得超过1285个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:275万
展开全部
(1) 我已经给你实现了,源代码你拿去试试,不明白再hi我

(2) 顺便说一下:你的两个列子有点矛盾(一个不包含起始字符,一个包含起始字符),我给你截取的是包含起始字符,而不含终止字符的(我可以按你的需要改),测试结果如下:

传入参数:"123abc132abc1234.abc"121"","123",'a','a' 返回:abc132
传入的参数是:"1abcdefg2fgjklmn3opq123","fg",'j','o' 返回: jklmn3

(3) 如果函数没有找到,则屏幕提示:
Sorry, httpcutfun() returned NULL!"
然后退出程序

相信这就是你要的,你再多测测看是否满足要求,我可以按你的要求再调整一下。

#include<iostream>
#include<string>
using namespace std;

char* httpcutfun(char* pSrcStr,char* pStartStr,char sCh, char eCh);
void main()
{
cout << "Please input a string:" << endl;
string buff; // 缓存
getline(cin, buff, '\n'); // 从命令窗口获取一字符串并存入缓存,以回车为输入结束标志
cout << "Please input the start string:" << endl;
string start_str; // 开始字符串
getline(cin, start_str, '\n');
char start_cut_char; // 开始截取字符
cout << "Please input the start_cut_char: ";
cin >> start_cut_char; // 从屏幕中获取截取开始字符
char end_cut_char; // 结束截取字符
cout << "Please input the end_cut_char: ";
cin >> end_cut_char; // 从屏幕中获取结束截取字符
char* pResult = httpcutfun(
(char*)buff.c_str(),
(char*)start_str.c_str(),
start_cut_char,
end_cut_char);
cout << "The returned string from httpcutfun() is :\n"
<< (pResult ? pResult : "Sorry, httpcutfun() returned NULL!") << endl;
}

char* httpcutfun(char* pSrcStr,char* pStartStr,char sCh, char eCh)
{
if(NULL == pSrcStr || NULL == pStartStr)return NULL;
static string result;
string buff(pSrcStr);
string::size_type start_str_pos, start_cut_pos, end_cut_pos;
if((start_str_pos = buff.find(pStartStr)) == string::npos)return NULL;
else{
if((start_cut_pos = buff.find(sCh, start_str_pos + 1)) == string::npos)return NULL;
else if((end_cut_pos = buff.find(eCh, start_cut_pos + 1)) == string::npos)return NULL;
else result.assign(buff.begin() + start_cut_pos, buff.begin() + end_cut_pos);
}
return (char*)result.c_str();
}
忘至白葬不情必0T
2009-04-13 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
楼主能给出原题么,我对你的语言表达能力实在是.......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lihaosky123
2009-04-13 · TA获得超过134个赞
知道答主
回答量:143
采纳率:0%
帮助的人:0
展开全部
#include<cstring>
using namespace std;
char* httpcutfun(char* str,char* start,char a,char b)
{
int i;
for(i=0;i<strlen(start);i++){
if(start[i]!=str[i]){//没有起始字符串
return NULL;
}
}
for(i=strlen(start);i<strlen(str);i++){//找a
if(str[i]==a){
break;
}
}
if(i==strlen(str)){ //没有找到a
return NULL;
}
char* tmp=new char[strlen(str)];
int size=0;
for(i=i+1;i<strlen(str);i++){//找b
if(str[i]==b){
break;
}
tmp[size++]=str[i];//没到b,保存当前字符
}
if(i==strlen(str)){ //没有找到b
delete []tmp;
return NULL;
}
tmp[size]='\0';
return tmp;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
踏辉C
2009-04-13 · TA获得超过6254个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:78.3万
展开全部
#include"stdlib.h"
#include"stdio.h"
#include"conio.h"
#include"string.h"
char* httpcutfun(char* ,char*,char ,char);
main()
{
char a[20],b[10],c,d;
char *p;
scanf("%s%s",a,b); //a,b,c,d是将来要传递的参数
c=getch();
d=getch();
p=httpcutfun(a,b,c,d);
printf("%s",p);
system("pause");
}
char* httpcutfun(char* a,char* b,char c,char d);
{
char *p,*a1,*a2;
a1=a,a2=a;
未完,待续
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鹰眼不是漆无害
2009-04-12 · TA获得超过142个赞
知道答主
回答量:36
采纳率:0%
帮助的人:74.4万
展开全部
#include <cstdio>
#include <string>
using namespace std;

char* httpcutfun(char* source, char* aim, char start, char end){
string s(source);
int alen = strlen(aim), begin_pos = s.find(aim), slen = strlen(source), i;
bool find = false;
if(begin_pos == string::npos) return NULL;
if(s[begin_pos + alen] != start) return NULL;
for(i = begin_pos + alen + 1; i < slen; i++){
if(s[i] == end){
find = true;
break;
}
}
if(!find) return NULL;
return (char*)(s.substr(begin_pos + alen + 1, i - begin_pos - alen - 1).c_str());
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式