C 编写函数实现函数字符串字符颠倒
这是K&R中的一道题目:
编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()
函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。
输出示例:
hello
olleh
这是K&R中的一道题目:
编写一个函数reverse(s),将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
在PHP中曾经做过类似的题,见PHP 实现中文字符串截取无乱码,同样也是写reverse()
函数,我相信C中也有现成的函数,因为编译器高亮颜色不一样。
输出示例:
hello
olleh
each()
在一篇文章看到的时候第一反应:有点印象,但具体是干什么的已经记不起来了,查了手册之后:
返回数组中当前的键/值对并将数组指针向前移动一步
和next
的区别估计就在于是否返回值了,一个是键值对,一个是值,并且next()
中有一句话:
Note: 你将无法区别包含数组尾以及 boolean FALSE 单元的数组。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
看来next()
有一定限制条件。
还是手贱去买了那个域名,接下来我们要做的就是更换那些连接了,如果不使用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');
做到这样一题,是将其中多个空格替换为一个空格,回想起来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()
处理
固定某一元素不滚动感觉还是挺有用的,一侧边栏不动而滚另一侧,固定导航条,而固定footer则比较少见,关于footer,还要做一些特殊处理,之后会有说明。
当然,感觉代码还不好,需要改进=A=
左右比较简单,我们利用float
和position
的联合就能实现,下面代码中所实现的是左边栏固定。
题目如下:
编写一个将输入复制到输出的程序,并将其中的制表符替换为\t,把回退符替换为\b,把反斜杠替换为\。这样可以将制表符和退回符以可见的方式显示出来。
首先我傻呵呵的被坑,因为这是在getchar()
练习中,很自然的想到了putchar()
,结果这货只能输出一个字符啊,怎么破,搜了一下,用printf()
就好了……感觉简直坑。
getchar()
与putchar()
其实感觉也挺神奇,因为这货是读/写一个字符,书的引言就说C语言没有处理整个数组或字符串的操作,暂时也只看到这个,感觉还挺好玩的。
书上给的代码是:
#include <stdio.h>
main(void)
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
EOF到底是什么,从我接触至今困惑了好久,于是去搜了一下,在阮一峰的博客找到了答案,算比较好懂的,不得不说这是个好博客=A=
EOF在书上,看了两本(才两本=A=),解释都是这样的:
EOF , end of file, 文件结束
啥,为什么文件结束会有个值,他要拿来干嘛?
而且在C中以前尝试过输出,输出结果为-1
,这又是什么个情况?
做文件管理的基础设施建设吧,嗯……反正还是打到打不开的思路来的。
这里为了后续方便,忽略了本目录.
的显示,然后对于根目录不显示上一级的..
$num = 0; // 统计子目录和文件个数
$problem = FALSE;
$fileList = [];
if (!empty($_GET['route']))
$dirname = $_GET['route'];
else
$dirname = 'upload';
$dir_handle = @opendir($dirname);
if (!file_exists($dirname))
echo "<script>window.location.href='"."index.php';</script>";
if (!$problem) {
while ($file = readdir($dir_handle)) {
$dirFile = $dirname.'/'.$file;
if ($dirname == 'upload' && $file != '.' && $file != '..') {
$fileList[$num] = array('file' => $file, 'filesize' => filesize($dirFile), 'filetype' => filetype($dirFile), 'filemtime' => date('Y/n/t',filemtime($dirFile)));
if (is_dir($dirFile)) {
$fileList[$num]['filesize'] = '';
}
$num++;
} elseif ($dirname != 'upload' && $file != '.') {
$fileList[$num] = array('file' => $file, 'filesize' => filesize($dirFile), 'filetype' => filetype($dirFile), 'filemtime' => date('Y/n/t',filemtime($dirFile)));
if (is_dir($dirFile)) {
$fileList[$num]['filesize'] = '';
}
$num++;
}
}
}
/*
// 统计文件夹大小
function dirSize($dir) {
$dir_size = 0;
if ($dirhandle = @opendir($dir)) {
while ($filename = readdir($dirhandle)) {
if ($filename != '.' && $filename != '..') {
$subFile = $dir.'/'.$filename;
if(is_dir($subFile))
$dir_size += dirSize($subFile);
if(is_file($subFile))
$dir_size += filesize($subFile);
}
}
closedir($dirhandle);
echo 'Hello';
return $dir_size;
}
}
*/
@closedir($dir_handle);
return $fileList;