【发布时间】:2013-07-31 07:14:25
【问题描述】:
我已经尝试解决这个问题超过 3 个小时,但它不能 100% 起作用。请帮帮我。
问题: 创建一个接收两个字符串(A 和 B)的函数,并显示字符串 B 的单词在 A 中出现的次数,而不使用任何属于该库的函数。 例如:
- 字符串 A:
house houuse househousehous - 字符串 B:
house
需要表明house这个词在字符串A中出现了3次。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
void count_string_b_a(char *a, char *b){
int i,j,k=0,size_a,size_b,equal=0,cont=0;
size_a = strlen(a);
size_b = strlen(b);
j=0;
for(i = 0; i < size_b; i++){
for(j = 0; j < size_a; j++){
k=0;
equal=0;
for(k=0; k<size_b; k++){
if(a[j+k] == b[i+k]) equal++;
if(equal==size_b) cont++;
}
}
}
printf("B %s appears %d times in A %s",b,cont,a);
}
int main(){
int i;
char a[40], b[10];
scanf("%[^\n]s",&a); getchar();
scanf("%[^\n]s",&b);
count_string_b_a(a,b);
getch();
}
【问题讨论】:
-
为什么不单步调试调试器中的代码,直到发现问题为止?
-
“不使用任何属于库的函数” 避免明确设计用于处理字符串的库函数的动机可能是什么?如果目标是了解这些函数的工作原理,您可以研究流行实现的源代码,但可以说能够使用它们比能够编写更重要i> 他们。
-
strlen()不是标准库中的函数吗?我必须假设您被允许使用 I/O 功能......但也许要求是不要使用任何字符串搜索功能。for (k = 0; ...)循环之前的分配k=0是多余的。 -
不使用调试器的一个原因是算法错误。通过思考比调试更好地解决这个问题。你有两条绳子,一根针和一个干草堆。对于大海捞针中的每个位置,您需要检查针是否与当前位置匹配。为此,您需要两个嵌套循环,而不是三个。
-
我认为使用strstr比自己实现要容易,strstr是C语言的标准函数。
标签: c