看的书是《C和指针》,现在回头再看C,有了很多新的体悟,也让我开始觉得脑子抽筋。告别太多年的指针让我死去活来,非常不习惯,好在多年养成的习惯还在,也不需要赶时间,慢慢来吧。相信啃下了指针之后就会顺滑很多了。
下面这段代码是《C和指针》第六章的一个习题,写出来很是花了我一番力气。又一次体会到了那种为写一行代码抓掉n根头发的感觉。。。。。
中间为了调试,又花时间学习了gdb,让我这个被IDE惯坏的人惊艳了很久。好东西啊!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | int del_substr(char *str, char const *substr) { char *ptr_substr = (char *)substr; char *strP = str; char *temp; bool fullMatch = TRUE; for(;*strP != '\0'; strP++) { if (*strP == *ptr_substr) break; } temp = strP; if (*temp != '\0') //Match first char. { while(*ptr_substr) { if (*temp++ != *ptr_substr++) { fullMatch = FALSE; break; } } if (fullMatch) { while(*temp) *strP++ = *temp++; *strP = '\0'; return 1; } } return 0; } |
榜样哈哈,偶也正在学习c 和 oc
程序有点错误:
char a[30]=”aDbcDEFghi”;
char b[30]=”DEF”;
del_substr(a,b);
并不能删除DEF;
int del_substr(char *str, char const *substr)
{
char *strtmp = str;
char *strfirst = str;
char *substrtmp = (char *)substr;
while(*strtmp != ”)
{
while (*substrtmp != ”)
{
if (*strtmp != *substrtmp)
{
break;
}
else
{
strtmp++;
substrtmp++;
}
}
if (*substrtmp == ”)
{
while (*strtmp != ”)
{
*strfirst = *strtmp;
strfirst++;
strtmp++;
}
*strfirst = ”;
return 1;
}
else
{
substrtmp = (char *)substr;
strfirst++;
strtmp = strfirst;
}
}
return 0;
}
lz的程序在第一次匹配失败后就退出了
int del_substr(char *str, char const *substr)
{
char *start = str;
len = strlen(substr);
while(strlen(start) >= len)
{
p = start;
q = substr;
while(*p && *q && (*p == *q))
{
++p;
++q;
}
if(*q == ”)
{
for ( ;*p; ++p)
*(p-len) = *p;
*(p – len) = ”;
}
++start;
}
return 0;
}