我不明白为什么即使字符相同,程序也会在for循环中跳过if语句。
该程序的目的是在另一个字符串中找到子字符串。
顺便说一句,我是编程新手,所以我希望这不是愚蠢的事情;)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int main()
{
bool isTrue=false;
char str[50];
char sub[50];
int i,j,t;
printf("Hello please enter a string: ");
gets(str);
printf("The substring you want to find: ");
gets(sub);
for(i=0;str[i] != 0; i++)
if(sub[0] == str[i])
for(j=0, t=i; sub[j] != 0; j++, t++){
bool isTrue=true;
if(sub[j]!=str[t])
isTrue=false;
}
if(isTrue)
printf("The substring found !");
else
printf("No substring");
}
答案 0 :(得分:3)
更改此行:
bool isTrue=true;
在此行中声明一个全新变量,并隐藏先前的变量:
isTrue=true; // Remove the "bool"
仅分配一个值,而不创建新变量。
答案 1 :(得分:0)
尝试一下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int main()
{
bool isTrue=false;
char str[50];
char sub[50];
int i,j,t;
printf("Hello please enter a string: ");
gets(str);
printf("The substring you want to find: ");
gets(sub);
for(i=0;str[i] != 0; i++)
if(sub[0] == str[i])
for(j=0, t=i; sub[j] != 0; j++, t++){
isTrue=true;
if(sub[j]!=str[t])
isTrue=false;
}
if(isTrue)
printf("The substring found !");
else
printf("No substring");
}
基本上,只有您在其中执行的代码:
for(j=0, t=i; sub[j] != 0; j++, t++){
bool isTrue=true;
但是您确实在一开始就声明了isTrue。因此,当您执行此操作时,您只为该for循环创建一个isTrue,该for循环仅在其中更改,而不在循环之后。只需删除bool bevore,它就可以工作。
答案 2 :(得分:0)
让我们只关注这里的循环。这是我想出的:
for(i=0; str[i] != 0; i++){
if(sub[0] == str[i]){
isTrue = true;
for(j=0, t=i; sub[j] != 0; j++, t++){
if(sub[j]!=str[t]){
isTrue=false;
break;
}
}
if(isTrue) break;
}
}
首先,您不想在第二个循环中每次都将isTrue定义为true。您只需要在第二个循环之前执行一次。其次,一旦它不再是子字符串,则可以退出第二个循环。不会再神奇地成为现实。
第三,找到子字符串后,您无需继续检查。因此,您可以将其作为第一个循环结束时的检查。