Ins_Tree(p,b)//p,c是实参;
主函数外应该有一个类似于下面的自定义函数;
int Ins_Tree((int)p,(int)b)//int是函数类型(也可以是其他类型),Ins_Tree函数名,p和b也有数据类型
{..........}
如果你用 Linux 或 Unix,有现成的 tr 程序可以用,如 cat a.txt | tr p b,处理所有文件的脚本如下 :
#!/bin/sh
for i in *.txt
do
mv $i $i.bak &&cat $i.bak | tr p b >$i
done
对应的C程序:
#include <stdio.h>
#include <stdlib.h>
/* 将 buffer 中的 p 替换成 b */
char* replace(char* buffer, size_t length)
{
size_t i
if (buffer != NULL)
for (i = 0i <length++i)
if (buffer[i] == 'p')
buffer[i] = 'b'
return buffer
}
/* 替换一个文件 */
void process_file(const char* filename)
{
FILE* fsrc
FILE* fdest
char filename_backup[1024]
char buffer[4096]
size_t buffer_size = 4096
// 将原文件重命名为 filename.bak
sprintf(filename_backup, "%s.bak", filename)
rename(filename, filename_backup)
if ((fdest = fopen(filename, "wb")) == NULL)
{
printf("Open file %s failed\n", filename)
rename(filename_backup, filename)
return
}
fsrc = fopen(filename_backup, "rb")
if (fsrc == NULL)
{
printf("Open file %s failed\n", filename_backup)
fclose(fdest)
rename(filename_backup, filename)
return
}
while (!feof(fsrc))
{
size_t bytes_read = fread(buffer, 1, buffer_size, fsrc)
fwrite(replace(buffer, bytes_read), 1, bytes_read, fdest)
}
fclose(fsrc)
fclose(fdest)
}
int main(int argc, char* argv[])
{
int i
if (argc <2)
{
printf("Usage: %s filename1 [filename2 ..].\n", argv[0])
return -1
}
for (i = 1i <argci++)
process_file(argv[i])
return 0
}
这个涉及到C语言里运算优先级的问题,小括号是第二级运算,所以先算小括号里的,但是自增++是第14级运算,而*是一级运算,所以先算*运算,在++,而++p和p++不一样,++p是先增加一,后运算,p++是先用p运算,再自增!