我创建了一个行为异常的程序-我不确定为什么它给出了不正确的值。例如,当我使用输入:(“聊天框”,“帽子”)时,它可以正常工作:
The starting position is 3.
String 'hat' occured for 1 time(s).
但是,如果我删除空格(“ achatterbox”,“ hat”),则会显示:
String 'hat' occured for 0 time(s).
运动说明:
/ *编写一个名为findString()的函数,以确定一个字符串是否在另一字符串内。该函数的第一个参数应该是要搜索的字符串,第二个参数是您要查找的字符串。如果函数找到了指定的字符串,则让它返回源字符串在找到该字符串的位置。如果该函数找不到字符串,则返回-1。因此,例如,调用单击此处以查看代码图片索引= findString(“一个chatterbox”,“ hat”);在字符串“ a chatterbox”中搜索字符串“ hat”。由于源字符串中确实存在“帽子”,因此该函数返回3来指示在源字符串中找到“帽子”的起始位置。 * /
我的代码:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int findString (char motherArgument[], char childArgument[]);
int main(int argc, char const *argv[])
{
printf("%s",findString ("a chatterbox", "hat")); //why if I remove space ' ' this does not work, why?
return 0;
}
int findString (char motherArgument[], char childArgument[]) // is child inside the mother?
{
int i, flag = false, freq = 0;
for (i = 0; i < strlen(motherArgument); i++) // going through mother
{
if(motherArgument[i] == childArgument[i]) // chars equal?
{
flag = true;
printf("The starting position is %d.", i - 1); // i -1 to get 3 as in the example
freq++; // frequency
}
}
if (flag = true)
{
printf("\nString '%s' occured for %d time(s).\n", childArgument, freq);
}
else
{
printf("None\n"); // false = none
return -1;
}
}
我在做什么错?我应该以其他方式输入数据吗?
答案 0 :(得分:1)
company_id==null
这是不正确的。两个字符串都不要使用相同的索引。
搜索motherArgument,直到找到与childArgument的FIRST字符匹配的字符。如果找到,请继续检查两个字符串的后续字符是否相等。
答案 1 :(得分:0)
我看到您的代码有两个问题,您的findString()
函数和您的main()
函数。编写测试代码,让我们首先整理您的main()
函数。它假定findString()
返回一个字符串,但不返回-返回int
。所以我们需要这样的东西:
int main(int argc, char const *argv[])
{
char *string = "a chatterbox";
int index = findString(string, "hat");
if (index != -1)
{
printf("%s\n", string + index);
}
return 0;
}
现在转到findString()
函数,正如@FredK和@Barmar正确指出的那样,这是不正确的:
if(motherArgument[i] == childArgument[i])
但除此之外,这还意味着什么:
freq++; // frequency
问题说明中没有任何内容提到频率计数。然后有一个flag
变量,您可以include <stdbool.h>
对其进行声明,并始终int
对其进行声明。似乎可以控制某些不在规范中的打印。最后,如果失败,您将返回-1
,但是如果成功,您将不会明确返回任何内容!
让我们尝试对findString()
进行最小限度的实施:
int findString(const char *string, const char *substring)
{
for (int i = 0; i < strlen(string); i++)
{
if (strncmp(string + i, substring, strlen(substring)) == 0)
{
return i;
}
}
return -1;
}
现在您会告诉我们您不允许使用strncmp()
。无论如何,您现在都有一个基本模型,说明这些例程应如何交互并可以根据需要填写代码。除了通常的调试和测试外,在编写程序时还会问自己一些问题:
如果一个或两个参数字符串都是空字符串怎么办?还是相同的字符串?如果子字符串比字符串长,会发生什么?我们的循环极限是正确的还是可以做得更好?
首先确定在任何情况下应发生的情况,然后确保您的代码执行正确的事情。