我编写了一个函数,它使用strstr()函数来确定string2是否在string1中有任何匹配项。这工作正常(我还将两个字符串转换为小写,以便我可以进行不区分大小写的匹配。)。但是,strstr()仅查找匹配发生的第一个时间。有没有办法用它来查找匹配发生的每个时间?例如:
class cr {
private $priv_member;
function cr($val)
{$this->priv_member = $val;}
static function comp_func_cr($c2, $c1)
{if ($c2->priv_member === $c1->priv_member) return 0;
return ($c2->priv_member > $c1->priv_member)? 1:-1;}}
如果在位置0找到匹配,则返回0,在位置6再次找到6,会返回6吗?
这里写的是原始函数(包括在main中调用函数):
string1[] = "ABCDEFABC";
string2[] = "ABC";
答案 0 :(得分:3)
鉴于
library(dplyr)
library(ggplot2)
df_max <- df %>%
group_by(Color, Shape) %>%
slice(which.max(Freq))
head(df_max)
# Source: local data frame [4 x 4]
# Groups: Color, Shape [4]
#
# Color Shape Size Freq
# (chr) (chr) (chr) (int)
# 1 Red Square Medium 6
# 2 Red Triangle Big 12
# 3 Yellow Square Big 10
# 4 Yellow Triangle Small 8
ggplot(df_max, aes(x = Color, y = Shape, fill = Size)) +
geom_tile()
char string1[] = "ABCDEFABC";
char string2[] = "ABC";
将返回指向strstr(string1, string2)
的第一个元素的指针。
如果在位置0找到匹配,则返回0,在位置6再次找到6,会返回6吗?
为了检查string1
中string2
的多次出现,您必须多次拨打string1
并且偏离strstr
。 E.g。
string1
答案 1 :(得分:2)
我认为这就是你所需要的:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void){
char string1[] = "ABCDABCEFABC";
char string2[] = "ABC";
char *s1, *s2, *s3;
size_t lenstring1 = strlen(string1);
size_t lenstring2 = strlen(string2);
if (lenstring2 < 1){
printf("There is no substring found"); /* or what ever */
exit(1);
}
size_t i=0,j=0;
int found=0;
s1 = string1;
s2 = string2;
for(i = 0; i < lenstring1; i++){
if(*s1 == *s2){
s3 = s1;
for(j = 0;j < lenstring2;j++){
if(*s3 == *s2){
s3++;s2++;
}else{
break;
}
}
s2 = string2;
if(j == strlen(string2)){
found = 1;
printf("%s found at index : %zu\n",string2,i+1);
}
}
s1++;
}
if(found == 0){
printf("No match Found");
}
return 0;
}
输出:
ABC found at index : 1 ABC found at index : 5 ABC found at index : 10
如果 string2 为空,您将获得:
找不到子字符串