我是C语言的新手学生。 我的老师说我们必须写一个项目去: 在第一个字符串中找到第二个字符串,没有任何指针(*)。到目前为止,我已经学习了循环,条件,函数和数组,它们是我唯一的选择。 此项目必须从两个级别从用户那里获取字符串。检查它们并打印结果。
现在我写了些废话:
int main()
{
char source[MAX_STR_LEN];
char target[MAX_STR_LEN];
int len = 50;
int a;
scanf("%s", &source);
scanf("%s", &target);
for (int i = 0; i <= len; i++)
{
if (strncasecmp(source[i], target[i], strlen(target)) == 0)
{
int a = 1;
if (a == 1)
{
printf("%s is inner of %s", target, source);
}
else
{
printf("%s is NOT inner of %s", target, source);
}
}
}
return 0;
}
但是我的项目什么也不打印,并且当我输入两个字符串时会自动关闭。我确定我的代码不正确,是否有任何简单的方法可以做到? 谢谢
答案 0 :(得分:0)
一种非常简单的方法是简单地逐字符检查源字符串以查看是否找到目标字符串。换句话说:
这可以使用两个for循环来完成,其中外循环迭代源字符串中的所有字符,而内循环则在比较两个字符串中的字符时迭代目标字符串。
您可以将其可视化为:
int main()
{
char source[MAX_STR_LEN] = "Hello World";
char target[MAX_STR_LEN] = "lo";
int source_index = 0;
int match = 0;
while (source[source_index] != '\0')
{
int target_index = 0;
while (target[target_index] != '\0' &&
source[source_index + target_index] != '\0' &&
source[source_index + target_index] == target[target_index])
{
++target_index;
if (target[target_index] == '\0')
{
match = 1;
break;
}
}
if (match) break;
++ source_index;
}
if (match)
{
printf("found\n");
}
else
{
printf("not found\n");
}
return 0;
}
一个简单的实现可能看起来像:
{{1}}
答案 1 :(得分:0)
首先,您必须改进如何在原始字符串中搜索子字符串的逻辑,或者如果您的老师允许,您可以离开C语言进行搜索。
strstr从事这项工作。
下面是我的代码,我在您的代码中添加了注释
#include <stdio.h>
#include <strings.h>
#define MAX_STR_LEN 50
int main(void)
{
char source[MAX_STR_LEN];
char target[MAX_STR_LEN];
//int len = 50;
//int a;
scanf(" %s", source); //char array name is used like pointer to the first element of array
scanf(" %s", target);
char* ret = NULL;
ret = strstr(source, target);
if(ret == NULL)
printf("%s is NOT inner of %s", target, source);
else
printf("%s is inner of %s", target, source);
return 0;
}
答案 2 :(得分:-1)
兄弟,您分配了一个int a = 1;
的值,并且在您检查if(a == 1)
之后就没有任何意义了,因为else{printf("%s is NOT inner of %s", target, source);}
以上这段代码在这种情况下将永远不会使用,这是解决方案{ {3}}小心:)