2012-04-19 60 views
1

我想写一个命令来替换文件中的字符。例如, ./replace E XY hello.txt [b] hello.txt [/ b]包含单词[b] HELLO WORLD [/ b]。字母E将被XY取代。 因此,HELLO WORLD将成为HXYLLO WORLD。 我已经读取的文件以一个炭BUF [100]与argv错误比较缓冲区

0 1 2 3 4 5 6 7 8 9 10 
[H]-[E]-[L]-[L]-[O]-[]-[W]-[O]-[R]-[L]-[D] 

我想说:

If buf[x] == argv[1], 
then buf[x] = argv[2] 

其中x是一个特定的缓冲元件(在这种情况下的buf [ 1] == argv [1])。

我得到这个错误:赋值使整数没有转换

如何将缓冲区中的元素与参数向量进行比较?

+2

编程语言? – 2012-04-19 13:24:42

+0

您的语法可以修复以解决类型问题,但是您的算法非常不完整。例如,您需要迭代参数并为argv添加另一个下标:(buf [x] == argv [1] [n])。 – 2012-04-19 13:28:00

回答

0

你使用C(这很可能给出的错误信息)假设:

你不能只比较字符串方式C.你只是比较指针现在。 你婉要做到这一点:

if (! strcmp(buf, argv)) { 
    // strings are equal 
} 

你可能想在C string handling阅读起来。

+0

好的。但问题是我想用XY代替'I'。但是'我'只占用一个元素。 – bos1234 2012-04-19 14:26:35

+0

是的。你需要做更多的工作,而不仅仅是就地替代。尝试将字符串复制到新缓冲区,并在复制时扫描要替换的图案。 – 2012-04-19 14:31:43

0

如果您需要一个程序来代替所描述的字符串(以及更多),请尝试streplace

如果要实现这一点,尝试使用像Java,C++或Python语言,其中字符串处理比C.

如果必须使用C,你必须使用像“STRCMP功能(更容易)','strcpy()','memcpy()'或'memmove()'。提示:char buf[100]可能也不是读取整个文件的好选择。

编辑后评论: 请考虑你的概念和设计 - 这是不好的。例如:你错过的当前解决方案与一个“读”块中的开始匹配,然后结束。

另外你目前的程序有一些问题:恕我直言,你忘了关闭第40行的注释,它跳过了与程序其余部分混乱的右括号。

请在你输入前仔细考虑!首先进行设计并写下来。

另请:请阅读(并理解)原始答案(特别是带有字符串函数的部分);调整你的程序。

+0

这是我到目前为止的代码。错误在第37行http://codepad.org/qVZtTDZt – bos1234 2012-04-20 00:52:31