在C语言中,如何将字符串的其余部分放在特定字符之后
我想得到第一个“/”符号后面的字符串的其余部分 我想要得到的期望是: index/homepage/component.html/sdfsdf在C语言中,如何将字符串的其余部分放在特定字符之后,c,parsing,C,Parsing,我想得到第一个“/”符号后面的字符串的其余部分 我想要得到的期望是: index/homepage/component.html/sdfsdf int main(int argc, char *argv[]){ char link[] = "www.google.com/index/homepage/component.html/sdfsdf"; char *token; char *temp[1000]; int i=0; token =
int main(int argc, char *argv[]){
char link[] = "www.google.com/index/homepage/component.html/sdfsdf";
char *token;
char *temp[1000];
int i=0;
token = strtok(link, "/");
while(token != NULL){
temp[i] = token;
token = strtok(NULL, "/");
++i;
}
printf("the parse string: %s\n",*temp);
return 0;
}
the parse string: www.google.com
希望这有帮助。首先找出“/”字符在字符串中的位置,然后构建子字符串,在每个代码块上都提到了它的作用
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char link[] = "www.google.com/index/homepage/component.html/sdfsdf";
char linktemp[50];
int i=0,c=0;
////Finding the Position of First '/'
for(i=0;i<strlen(link);i++)
{
if(link[i]=='/')
{
break;
}
}
//If no '/' Character found
if(i==strlen(link))
{
printf("No '/' Character found in the String");
return 0;
}
////Creating the Substring
while(c<strlen(link)-i)
{
linktemp[c]=link[i+c+1];
c++;
}
linktemp[c] ='\0';
printf("the parse string: %s\n",linktemp);
return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
char link[]=“www.google.com/index/homepage/component.html/sdfsdf”;
char-linktemp[50];
int i=0,c=0;
////查找第一个“/”的位置
对于(i=0;i由于在较长的字符串中有一个目标字符,要查找第一个匹配项,只需使用strchr
返回指向较大字符串中所需字符的指针。在这种情况下,第一个'/'
。使用strchr
查找与第一个'/'相关联的指针。
您的电话可能是:
char *p = strchr (link, '/');
如果p
不是NULL
,则在字符串中找到它。回想一下,找到的字符是不需要的分隔符,因此将指针向前移动1,使其指向“/”后面的第一个字符
此时,只需调用strlen()
即可告诉您必须从保存结果的link
字符串复制多少字符。然后使用长度,您只需调用memcpy
即可从link
从指针位置开始复制到字符串末尾(包括nul终止字符)以获取所需字符。一个简短的示例是:
#include <stdio.h>
#include <string.h>
#define MAXTOK 2048
int main (void) {
char link[] = "www.google.com/index/homepage/component.html/sdfsdf",
*p = link,
token[MAXTOK]; /* declare array to hold results */
if ((p = strchr (link, '/'))) { /* check whether '/' found in line */
size_t len = strlen (++p); /* advance pointer by 1, get length */
if (len > MAXTOK - 1) { /* check if length exceeds available */
fputs ("error: string exceeds allowable length.\n", stderr);
return 1;
}
memcpy (token, p, len + 1); /* copy remaining part of string */
printf ("%s\n", token); /* output it */
}
}
提供所需的结果字符串。请仔细查看,如果有问题,请告诉我。其他答案涵盖了一种更受欢迎的方法,即strchr()
,但对于完整性,这是使用和sscanf实现的方法
其工作原理是获取“/”之前的所有内容,并使用%*[^/]忽略它(*表示它不会将其放入变量中),然后在“/”的另一端获取所有内容,直到行末字符被%[^\n]命中为止
#include <stdio.h>
char link[] = "www.google.com/index/homepage/component.html/sdfsdf";
int main(int argc, char **argv){
char buff[128];
// Seporate string after first "/"
// %*[^/] goes untill it finds '/' and stops, but wont put it in a var
// "/" will eat the '/' charater
// %[^\n] goes untill it finds the '\n' char and puts it into buff
sscanf(link, "%*[^/]/%[^\n]", buff);
printf("%s\n", buff);
}
#包括
char link[]=“www.google.com/index/homepage/component.html/sdfsdf”;
int main(int argc,字符**argv){
字符buff[128];
//第一个“/”后的深褐色字符串
//%*[^/]直到找到“/”并停止,但不会将其放入变量中
//“/”将吃掉“/”字符
//%[^\n]直到找到“\n”字符并将其放入buff
sscanf(链接“%*[^/]/%[^\n]”,buff);
printf(“%s\n”,浅黄色);
}
编辑:添加了对“*”的澄清。我认为您需要多读一点。可能还需要多读一点关于和指针以及字符串的内容。可能使用strchr()
。可能不使用strtok()
。请注意,只回答代码而不做任何解释是不好的,因此这种回答是不鼓励的。请花些时间阅读。@Someprogrammerdude谢谢你的建议,我已经解释了这在代码中是如何工作的,顺便提一下,现在我已经添加了解释。你使用 sscanf
是正确的——但是sscanf
不使用正则表达式匹配。相反,整个Xscanf
函数族使用预先确定的转换说明符来处理字符提取。[…]
只是另一个用于匹配非空字符序列的转换说明符,还允许对匹配进行求反。sscanf(recvline,“%[^/]”,buff);此行将获得:www.google.com--%*[^/]直到它找到“/”并停止。这里的*是做什么的。很抱歉,我对reagexMiracle的记忆生锈了,*这意味着它所读取的内容不会被放入变量中。希望对这一个有帮助的SSO,strchr将一直运行到“/”找到,然后我们将指针前进到“/”由1。然后从那里将字符串的其余部分复制到标记中。这里我们将指针或内存地址复制到数组中,该数组指向字符串的剩余字符。我是否正确理解了它?因为p
是指向'/'
之后的字符的指针,所以您可以将其视为指向字符串的任何指针(在本例中,它只是“字符串的其余部分”)。因此,当您使用memcpy(token,p,len+1)
时,您正在将len+1
字节从p
复制到token
(您添加+1
以确保复制nul终止字符)。无需在此处使用strcpy,因为您已经在len
中计算了字符串其余部分的长度。调用strcpy
只需在复制之前再次扫描字符串的结尾,此处无需此操作。
:)
#include <stdio.h>
char link[] = "www.google.com/index/homepage/component.html/sdfsdf";
int main(int argc, char **argv){
char buff[128];
// Seporate string after first "/"
// %*[^/] goes untill it finds '/' and stops, but wont put it in a var
// "/" will eat the '/' charater
// %[^\n] goes untill it finds the '\n' char and puts it into buff
sscanf(link, "%*[^/]/%[^\n]", buff);
printf("%s\n", buff);
}