C 如何使用两个正斜杠提取字符串

C 如何使用两个正斜杠提取字符串,c,strstr,C,Strstr,我有一个字符串,它总是有两个前斜杠,如/709/nviTemp1 我想从该字符串中提取/709/,并以char*的形式返回它,我将如何使用strstr实现这一目的 我还可能在路径中有许多前斜杠,如/709/nvitemp1/d/s/ 因此,我只需要获取第一个令牌/709/为此尝试使用strtokstrtok根据分隔符将字符串拆分为不同的标记。像这样: char str[100] = "/709/nviTemp1"; char delimiter[2] = "/"; char *result; c

我有一个字符串,它总是有两个前斜杠,如
/709/nviTemp1
我想从该字符串中提取
/709/
,并以char*的形式返回它,我将如何使用strstr实现这一目的

我还可能在路径中有许多前斜杠,如
/709/nvitemp1/d/s/


因此,我只需要获取第一个令牌
/709/

为此尝试使用
strtok
strtok
根据分隔符将字符串拆分为不同的标记。像这样:

char str[100] = "/709/nviTemp1";
char delimiter[2] = "/";
char *result;
char *finalresult;

result = strtok(str, delimiter); // splits by first occurence of '/', e.g "709"
strcat(finalresult,"/");
strcat(finalresult, result);
strcat(finalresult,"/");
printf("%s",finalresult);

请注意,strtok会修改您传递给它的原始字符串。

要执行您询问的任务,以下代码就足够了。如果你需要一个更普遍的解决方案,答案显然会有所不同

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *str = "/709/nviTemp1";
    char *delims = "/";
    char *strCopy;

    char *tmpResult;

    strCopy = strdup(str);
    tmpResult = strtok(strCopy, delims);

    // +1 for the first slash, +1 for the second slash, + another for the terminating NULL
    char *finalResult = (char*)calloc(strlen(tmpResult) + 3, 1);

    strcat(finalResult, "/");
    strcat(finalResult, tmpResult);
    strcat(finalResult, "/");

    free(strCopy);

    printf("%s",finalResult);
}
#包括
#包括
#包括
int main()
{
char*str=“/709/nviTemp1”;
char*delims=“/”;
字符*strCopy;
char*tmpResult;
strCopy=strdup(str);
tmpResult=strtok(strCopy,delims);
//第一个斜杠为+1,第二个斜杠为+1,另一个斜杠为空
char*finalResult=(char*)calloc(strlen(tmpResult)+3,1);
strcat(最终结果“/”;
strcat(最终结果,tmpResult);
strcat(最终结果“/”;
免费(复印件);
printf(“%s”,最终结果);
}
输出:

/709/


使用strchr查找第一个斜杠。前进指针并找到第二条斜线。前进指针并设置为
'\0'

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

int main (int argc , char *argv[]) {
    char *tok;
    char text[] = "/709/nvitemp1/d/s/";

    if ( ( tok = strchr ( text, '/')) != NULL) {//find first /
        tok++;
        if ( ( tok = strchr ( tok, '/')) != NULL) {//find second /
            tok++;
            *tok = '\0';
            printf ( "%s\n", text);
        }
    }
    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
char*tok;
字符文本[]=“/709/nvitemp1/d/s/”;
if((tok=strchr(text,“/”)!=NULL){//find first/
tok++;
if((tok=strchr(tok,“/”)!=NULL){//find second/
tok++;
*tok='\0';
printf(“%s\n”,文本);
}
}
返回0;
}

您可以尝试以下方法:

char str[100] = "/709/nviTemp1";
char resu[100];
char *tmp;

tmp = strchr(str+1, '/');
strncpy(resu, str, (size_t)(tmp - str) + 1);
resu[(size_t)(tmp - str) + 1] = '\0';

strhr
搜索第一个“/”,但从
str+1开始,跳过真正的第一个“/”。然后计算开始和找到“/”之间的“大小”,并使用
strncpy
复制内容,并添加尾随“\0”。

您必须使用
strstr
还是可以使用其他方法?如果你必须使用strstr,这是一个家庭作业问题吗?不是,这不是一个家庭作业问题。是的,我可以使用其他方法第一个“/”是否始终位于第一个位置?如果是,您只需在第二个字符串之后“剪切”字符串。查看和。@hexasoft是的,它总是在第一个位置。我想剪切/709/而不是在前斜线之间剪切另一个
strtok
,它将在第二个“/”之后返回所有内容。您没有理解我,我想从字符串中提取/709/。在您的最后一句话之前,使用字符串的副本通常是一个好主意,该副本由
strdup
返回,它保证您修改的字符串将存在于可写的内存中。将字符串声明为char*str=“/709/nviTemp1”将崩溃,除非使用重复的字符串。此外,您应该只执行1个strtok,而不是3个!如果您知道分隔符是什么,那么只需使用strtok
抓取“709”,然后添加带附件的“/”。