2014年2月

C 外部变量的使用

书中看到这样一段目前仅仅根据自己的理解mark一下,说不定理解的不正确。

外部变量似乎和全局变量是差不多一个意思的(函数中的局部变量在C中称作自动变量)。

外部变量必须定义在所有函数之外,且只能定义一次,这点很好理解,变量自然是唯一的,在每个需要访问外部变量的函数中,必须声明相应的外部变量,此时说明其类型。

显示声明用extern,某些情况下可以省略,那就是外部变量的定义出现在他所使用的函数前(先定义在使用,我觉得在正常不过)。

举个例子:

- 阅读剩余部分 -

C 编写函数实现函数字符串字符颠倒

这是K&R中的一道题目:

编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。

在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。

输出示例:

hello
olleh

- 阅读剩余部分 -

PHP each() list() 的作用与遍历数组

each()在一篇文章看到的时候第一反应:有点印象,但具体是干什么的已经记不起来了,查了手册之后:

返回数组中当前的键/值对并将数组指针向前移动一步

next的区别估计就在于是否返回值了,一个是键值对,一个是值,并且next()中有一句话:

Note: 你将无法区别包含数组尾以及 boolean FALSE 单元的数组。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。

看来next()有一定限制条件。

- 阅读剩余部分 -

C 输出菱形

受泽发来的贺电- -嗯……数学不是很好所以码了有一会儿吧。

数学不好搞算法好吃力……

输出比如下面一样的菱形:

   *
  ***
 *****
*******
 *****
  ***
   *

- 阅读剩余部分 -

C 打印输入中单词长度的直方图

导言中的题目,昨天我勉强算实现了输出,不过效果其实很糟糕,还是没有考虑今天发的那几个问题,下载好答案之后就看了看,题目意思也明白了:

原话:

编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易,垂直方向的直方图则要困难一些。

实际上,他是要统计,比如hello有5个字母,我只输入hello 那么5中就输出1,类似的hello world在5中就输出2

我当时实际上只是很简单的直方图了,而没有考虑本身,所以是个错误的答案。

同时我还在想,我怎么知道单词有多长呢——答案很好的解决了这个问题。

- 阅读剩余部分 -

MYSQL 从更换域名复习到的replace

还是手贱去买了那个域名,接下来我们要做的就是更换那些连接了,如果不使用SQL,更换是非常费劲的一件事情,而现在可以用语句来解决了,首先找到大致的位置,比如这次,我们找到数据库的表typecho_contents里记录的就是文字内容,可是如果用UPDATE ... WHERE ..=..用的是完全匹配,要用LIKE吗?我以前似乎也不是这样做的,去看了一下以前搬家的博文,看到了replace(),如法炮制。

Update 表名 SET 要替换的列=REPLACE(要替换的列,被替换的字符,替换后的字符)

于是用

UPDATE typecho_contents set text=replace(text, 'test.xsky.me', 'test.codesky.me');
UPDATE typecho_options set text=replace(value, 'learn.xsky.me', 'codesky.me');
UPDATE typecho_contents set text=replace(text, 'learn.xsky.me', 'codesky.me');

- 阅读剩余部分 -

C 一行输出一个单词

貌似以前也看到有一道题是这样的,这里发现了思维不够严密,比如我是这么写的:

#include <stdio.h>

#define IN 1
#define OUT 0

main(void)
{
    int c, state;

    while ((c = getchar()) != EOF) {
        if (c == '\t' || c == ' ')
            printf("\n");
        else
            putchar(c);
    }

    return 0;
}

- 阅读剩余部分 -

C 删除输入中多余空格

做到这样一题,是将其中多个空格替换为一个空格,回想起来PHP也有类似需求,暂时先mark一下这个方法。

我的想法是根据空格前面是否存在空格来控制空格的输出。(书中答案貌似更简练一些,直接加一个变量记录这次输出的值,用那个值来对比)

#include <stdio.h>

int space = 0;

int c;

main(void)
{
    while ((c = getchar()) != EOF) {
        if (c == ' ' && !space) {
            space = 1;
            putchar(c);
        } else if (c != ' ') {
            space = 0;
            putchar(c);
        }
    }

    return 0;
}

PHP中可以用转为数组-删除数组空白元素-转为字符串的方法,首尾部分空格可以用trim()处理