九月 2nd, 2008

重新开始学习C语言的第一段小程序 - del_substr。

1,163 views, C, by Allen Dang.

看的书是《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;
}

Back Top

我使用的Firefox 3.0扩展。 C语言练习 - 用筛选法算质数。

Responses to “重新开始学习C语言的第一段小程序 - del_substr。”

  1. 榜样哈哈,偶也正在学习c 和 oc

  2. 程序有点错误:
    char a[30]=”aDbcDEFghi”;
    char b[30]=”DEF”;
    del_substr(a,b);
    并不能删除DEF;

  3. 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;
    }

  4. lz的程序在第一次匹配失败后就退出了

  5. 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;
    }

发表回复

Back Top