在字符串中搜索子字符串时出现分段错误
Segmentation fault in searching for substring in string
我正在尝试编写一个方法来检查字符串以查看它是否包含子字符串。因此,例如,如果用户输入是 "hello" 并且他们正在搜索 "lo" 的字符串,则输出将是 "true",但如果他们正在搜索 "ol",则输出将是"false"。这是针对 class 的(我不是在找人帮我做)所以我应该手动做,而不是使用许多内置函数。现在我的代码编译,然后给我一个分段 fault:11。
void subsetCheck(char *string, char *srch){
char str[100];
char search[100];
strcpy(str, string);
strcpy(search, srch);
int i = 0, j = 0, flag = 0;
while(i < strlen(str)){
if(strcmp(str[i],search[j]) == 0){
for(j; j < strlen(search); j++){
if(strcmp(str[i],str[j]) != 0){
j = 0;
break;
}
else{
flag = 1;
}
}
}
i++;
}
if(flag == 1){
printf("TRUE");
}
else{
printf("FALSE");
}
return;
}
我编辑了我的代码,其中包含了评论中提到的一些事情以及重新安排了一些 for 循环并添加了评论以尝试解释我认为我在每一步都在做什么。
void subsetCheck(char *string, char *srch){
char str[100];
char search[100];
strcpy(str, string);
strcpy(search, srch);
int i = 0, j = 0, flag = 0, k = 0;
while(i < strlen(str)){
for(j; j <= strlen(search);j++){ //for length of the substring during each i iteration
if(str[i] == search[j]){ //if position i matches first letter in substring go into for loop
for(k; k <= strlen(search);k++){ //create variable k to allow iteration through strin without messing up placement of i, incase entire substrin isnt there
k = i;
if(str[k] != search[j]){ //if string position k doesnt equal position j, reassign both variables and break out of the loop
j = 0;
k = i;
flag = 0;
break;
}
else{ //if it does than assign flag the value of 1 and iterate both variables
flag = 1;
j++;
k++;
}
}
}
}
i++;
}
if(flag == 1){
printf("TRUE");
}
else{
printf("FALSE");
}
return;
}
if(strcmp(str[i],search[j]) == 0){
str[i]
和 search[j]
已经是单个字符。您应该使用比较运算符而不是 strcmp()
来比较字符。
我正在尝试编写一个方法来检查字符串以查看它是否包含子字符串。因此,例如,如果用户输入是 "hello" 并且他们正在搜索 "lo" 的字符串,则输出将是 "true",但如果他们正在搜索 "ol",则输出将是"false"。这是针对 class 的(我不是在找人帮我做)所以我应该手动做,而不是使用许多内置函数。现在我的代码编译,然后给我一个分段 fault:11。
void subsetCheck(char *string, char *srch){
char str[100];
char search[100];
strcpy(str, string);
strcpy(search, srch);
int i = 0, j = 0, flag = 0;
while(i < strlen(str)){
if(strcmp(str[i],search[j]) == 0){
for(j; j < strlen(search); j++){
if(strcmp(str[i],str[j]) != 0){
j = 0;
break;
}
else{
flag = 1;
}
}
}
i++;
}
if(flag == 1){
printf("TRUE");
}
else{
printf("FALSE");
}
return;
}
我编辑了我的代码,其中包含了评论中提到的一些事情以及重新安排了一些 for 循环并添加了评论以尝试解释我认为我在每一步都在做什么。
void subsetCheck(char *string, char *srch){
char str[100];
char search[100];
strcpy(str, string);
strcpy(search, srch);
int i = 0, j = 0, flag = 0, k = 0;
while(i < strlen(str)){
for(j; j <= strlen(search);j++){ //for length of the substring during each i iteration
if(str[i] == search[j]){ //if position i matches first letter in substring go into for loop
for(k; k <= strlen(search);k++){ //create variable k to allow iteration through strin without messing up placement of i, incase entire substrin isnt there
k = i;
if(str[k] != search[j]){ //if string position k doesnt equal position j, reassign both variables and break out of the loop
j = 0;
k = i;
flag = 0;
break;
}
else{ //if it does than assign flag the value of 1 and iterate both variables
flag = 1;
j++;
k++;
}
}
}
}
i++;
}
if(flag == 1){
printf("TRUE");
}
else{
printf("FALSE");
}
return;
}
if(strcmp(str[i],search[j]) == 0){
str[i]
和 search[j]
已经是单个字符。您应该使用比较运算符而不是 strcmp()
来比较字符。