Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用位于C字符串中的两个字符*获取子字符串_C++_C_String_Char - Fatal编程技术网

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 ;

    }