C++ 使用位于C字符串中的两个字符*获取子字符串
让C++ 使用位于C字符串中的两个字符*获取子字符串,c++,c,string,char,C++,C,String,Char,让long_text、keyword1和keyword2成为三个char*指针关键字1和关键字2是长文本的两个子字符串。使用strstr(long\u text,keyword1)我可以得到一个char*,它指向long\u text中第一次出现的keyword1,使用strstr(long\u text,keyword2)我可以得到一个char*,它指向long\u text中第一次出现的keyword2关键字1和关键字2不重叠 是否有方法使用从中获得的两个char*从表示keyword1和k
long_text
、keyword1
和keyword2
成为三个char*
指针<代码>关键字1和关键字2是长文本的两个子字符串。使用strstr(long\u text,keyword1)
我可以得到一个char*
,它指向long\u text中第一次出现的keyword1
,使用strstr(long\u text,keyword2)
我可以得到一个char*
,它指向long\u text中第一次出现的keyword2
<代码>关键字1和关键字2不重叠
是否有方法使用从中获得的两个char*
从表示keyword1
和keyword2
之间字符串的long\u文本中提取子字符串
#包括
#包括
#包括
int main(){
char*long_text=“这是长文本中的关键字1,这是关键字2”;
char*keyword1=“keyword1”;
char*keyword2=“keyword2”;
char*k1_start=strstrstr(长文本,关键字1);
char*k2_start=strstrstr(长文本,关键字2);
//TODO能够打印“这是”
返回0;
}
void look for\u middle(const char*haystack,
常量字符*针1,常量字符*针2){
const char*start;/*关键字之间区域的开始*/
const char*end;/*关键字之间区域的结尾*/
常量char*pos1;/*匹配haystack中的针1*/
干草堆中的常量char*pos2;/*匹配针2*/
int length;/*针之间区域的长度*/
/*大海捞针*/
pos1=strstr(干草堆,1);
pos2=strstr(干草堆,针筒2);
if(pos1!=NULL&&pos2!=NULL){
/*两针都被发现了*/
if(pos1
这是您缺少的部分
// Move k1_start to end of keyword1
k1_start += strlen(keyword1);
// Copy text from k1_start to k2_start
char sub_string[32];
int len = k2_start - k1_start;
strncpy(sub_string, k1_start, len);
// Be sure to terminate the string
sub_string[len] = '\0';
嗯
这是一个类似C的函数,使用char*
并支持char数组
#include <stdio.h>
#include <string.h>
int main(void) {
char* long_text = "key1(text)key2";
char* keyword1 = "key1";
char* keyword2 = "key2";
char* k1 = strstr(long_text, keyword1);
char* k2 = strstr(long_text, keyword2);
// from first char of match up to first char of second match
char text[strlen(k1) - strlen(k2)];
int len = (int)strlen(k1);
for (int i = 0;; i++) {
text[i] = *k1; k1++;
if (i == (len - strlen(k2))) {
text[len - strlen(k2)] = '\0';
break;
}
}
char* res;
//We have now only keyword1 + middle part, compare until diff.,
//then remember position and just iterate from to it later.
int j = 0;
for (int i = 0;; i++) {
if (*keyword1 == text[i]) {
j = i;
keyword1++;
} else {
res = &text[++j];
break;
}
}
printf("%s\n", res);
return 0;
}
#包括
#包括
内部主(空){
char*long_text=“key1(text)key2”;
char*keyword1=“key1”;
char*keyword2=“key2”;
char*k1=strstrstr(长文本,关键字1);
char*k2=strstrstr(长文本,关键字2);
//从匹配的第一个字符到第二个匹配的第一个字符
字符文本[strlen(k1)-strlen(k2)];
int len=(int)strlen(k1);
对于(int i=0;i++){
text[i]=*k1;k1++;
如果(i==(len-strlen(k2))){
文本[len-strlen(k2)]='\0';
打破
}
}
字符*res;
//我们现在只有关键词1+中间部分,比较直到差异。,
//然后记住位置,稍后再从开始迭代到结束。
int j=0;
对于(int i=0;i++){
如果(*关键字1==文本[i]){
j=i;
关键词1++;
}否则{
res=&text[++j];
打破
}
}
printf(“%s\n”,res);
返回0;
}
此功能可以完成您的工作
char* strInner(char *long_text , char *keyword1 , char* keyword2)
{
char * a = strstr(long_text,keyword1);
a+= strlen(keyword1);
if(a==NULL)
{
cout<<"Keyword1 didn't found ! ";
return a ;
}
char * b = strstr(a,keyword2);
if(b==NULL)
{
cout<<"Keyword2 didn't found Or, found before Keyword1 ! ";
return b ;
}
char *inner = (char*)malloc(strlen(a)-strlen(b));
memcpy(inner,a,strlen(a)-strlen(b) );
return inner ;
}
char*strInner(char*long_text,char*keyword1,char*keyword2)
{
char*a=strstrstr(长文本,关键字1);
a+=strlen(关键字1);
如果(a==NULL)
{
coutYes有一个方法-尝试编写代码,如果您有任何问题,我们将在这里提供帮助谢谢您的评论。我在编写代码时遇到了这个问题。但是我很难找到适合此工作的C函数,甚至如果我想为此工作编写自己的函数,我也很难继续。对于此任务的一般性,我感到抱歉In,我想如果其他的用户有一个干净的解决方案,它可能更容易被重用。我会继续研究它,认为C++解决方案和C解决方案完全不同。你想要哪一个?C++也是受欢迎的,但是如果可能的话,使用两个位置和第一个关键字的长度来获得麻木。两个关键字之间的字符数。然后使用strncpy()
将这么多字符复制到结果字符串中。
#include <stdio.h>
#include <string.h>
int main(void) {
char* long_text = "key1(text)key2";
char* keyword1 = "key1";
char* keyword2 = "key2";
char* k1 = strstr(long_text, keyword1);
char* k2 = strstr(long_text, keyword2);
// from first char of match up to first char of second match
char text[strlen(k1) - strlen(k2)];
int len = (int)strlen(k1);
for (int i = 0;; i++) {
text[i] = *k1; k1++;
if (i == (len - strlen(k2))) {
text[len - strlen(k2)] = '\0';
break;
}
}
char* res;
//We have now only keyword1 + middle part, compare until diff.,
//then remember position and just iterate from to it later.
int j = 0;
for (int i = 0;; i++) {
if (*keyword1 == text[i]) {
j = i;
keyword1++;
} else {
res = &text[++j];
break;
}
}
printf("%s\n", res);
return 0;
}
char* strInner(char *long_text , char *keyword1 , char* keyword2)
{
char * a = strstr(long_text,keyword1);
a+= strlen(keyword1);
if(a==NULL)
{
cout<<"Keyword1 didn't found ! ";
return a ;
}
char * b = strstr(a,keyword2);
if(b==NULL)
{
cout<<"Keyword2 didn't found Or, found before Keyword1 ! ";
return b ;
}
char *inner = (char*)malloc(strlen(a)-strlen(b));
memcpy(inner,a,strlen(a)-strlen(b) );
return inner ;
}