因为全部编译不了,我又搞不定如何编译正确。不知是gcc版本太高,还是操作系统太新,毕竟是1994年写的代码。我呢,也不想编译新版本的ruby,那样代码太多,我看不懂,也不划看,于是先随便翻翻。
把simple中打开了两个文件,不能编译,就执行不了。
于是再翻开missing,和gnu的有些文件象。比如
strstr.c
char *
strstr(string, substring)
register char *string; /* String to search. */
char *substring; /* Substring to try to find in string. */
{
register char *a, *b;
strstr(string, substring)
register char *string; /* String to search. */
char *substring; /* Substring to try to find in string. */
{
register char *a, *b;
/* First scan quickly through the two strings looking for a
* single-character match. When it's found, then compare the
* rest of the substring.
*/
* single-character match. When it's found, then compare the
* rest of the substring.
*/
b = substring;
if (*b == 0) {
return string;
}
for ( ; *string != 0; string += 1) {
if (*string != *b) {
continue;
}
a = string;
while (1) {
if (*b == 0) {
return string;
}
if (*a++ != *b++) {
break;
}
}
b = substring;
}
return (char *) 0;
}
我读代码,也难读,先加个main
void main()
{
char *m1="helloworld";
char *m2="llo";
char *ok;
printf("%s\n",strstr2(m1,m2));
}
if (*b == 0) {
return string;
}
for ( ; *string != 0; string += 1) {
if (*string != *b) {
continue;
}
a = string;
while (1) {
if (*b == 0) {
return string;
}
if (*a++ != *b++) {
break;
}
}
b = substring;
}
return (char *) 0;
}
我读代码,也难读,先加个main
void main()
{
char *m1="helloworld";
char *m2="llo";
char *ok;
printf("%s\n",strstr2(m1,m2));
}
编译一把,看到结果后,再回头来理解代码,就理解了。
while (1) {
if (*b == 0) {
return string;
}
if (*a++ != *b++) {
break;
}
}
就用来比较,当相等时,继续比较,如果全部相等时,就返回母串。
其中a,b的值因为比较时移动了,若不相等时,又要回到下次比较的位置开始。
说不清,但好象就是理解了。
while (1) {
if (*b == 0) {
return string;
}
if (*a++ != *b++) {
break;
}
}
就用来比较,当相等时,继续比较,如果全部相等时,就返回母串。
其中a,b的值因为比较时移动了,若不相等时,又要回到下次比较的位置开始。
说不清,但好象就是理解了。