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”,然后添加带附件的“/”。