c - 在C中没有指针的情况下在第二个字符串中查找第一个字符串
问题描述
我是新手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] 开始存在。
- 如果不是:检查目标字符串是否从源 [1] 开始。
- 如果不是:检查目标字符串是否从源 [2] 开始。
- 依此类推,直到到达源字符串的末尾。
这可以使用两个 for 循环来完成,其中外部循环迭代源字符串中的所有字符,内部循环迭代目标字符串,同时比较两个字符串中的字符。
您可以将其可视化为:
source: Hello World
target: lo
Hello World
lo // No match: He != lo
Hello World
lo // No match: el != lo
Hello World
lo // No match: ll != lo
Hello World
lo // Match: lo != lo
一个简单的实现可能如下所示:
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;
}
推荐阅读
- css - CSS无法更改chrome和bootstrap中的输入文本背景颜色
- python - 打印“A”、“B”和“C”的概率是多少(以小数表示)?
- php - 浏览器同步未打开 index.php(使用 Gulp)
- reactjs - 打字稿错误,我无法将函数分配给 RefObject.current 并且它说它不可调用
- firebase - Kotlin searchView 不会重新加载 Firebase 数组
- selenium-webdriver - 使用 wdio-cli/ 为 React Native 实现 resetApp 的方法?- 网络驱动程序
- flutter - firestore 邮政限制
- php - 在 Laravel 5.8 中使用会话传递可变数据
- c# - 在哪里下载 EntityFramework 的 System.Data.Objects.DLL
- c++ - 如何使用 __LINE__ 或其他方法从呼叫站点获取行号?