将字符串中的值替换为另一个字符串中的值

时间:2013-12-12 18:53:02

标签: c arrays string replace

我能够解决这个问题,感谢所有帮助我解决问题的人。

2 个答案:

答案 0 :(得分:1)

您可以使用

sprintf(word, "%s ", dictn);

如果您的代码使用printf,它应该与sprintf一起使用,前提是您没有溢出“word”,包括NULL终止,因此如果它小于dictn,您可能必须调整“word”的大小。

答案 1 :(得分:0)

首先,我假设您创建了数组worddictn,其大小足以保存任何文件的最大长度字符串。

第一个错误:

在您创建的循环中,i表示输入文件中的字符串数,j表示字典中的字符串数。 word是您的输入字符串变量,dictn是您的字典字符串变量。但是你想要检索并改变单词的第i个或第d个第j个字符。这可能会导致错误,因为可能会出现这样的情况:

假设inp个文件有10个单词,dictn有100个单词。在您的循环中,i的值为8,j的值为88.对应这些ij值,word的字符串值为,例如,{{ 1}}和apple的字符串值也为dictn。所以这意味着apple是输入文件的第8个单词和字典文件的第88个单词。如果满足其中一个if条件,编译器会尝试应用apple之类的语句。对于此示例,这意味着word[i]=dictn[j];。但是这两个字符串都有word[8] = dictn[88];作为值,只包含5个字符!这会导致错误,因为您已尝试检索5长度字符串的第88个字符并将其分配给5长度字符串的第8个字符。所以你的代码是错误的,它只适用于一些罕见的情况。

第二个错误:

我假设您想要读取输入文件中每个单词的整个字典文件,但是您只能在输入文件的第一个单词中读取它,因为您不重新打开它或在字典文件的开头设置位置指示器读完整本字典之后。

第三个错误:

假设您已将applelen1变量创建为整数,则永远不会达到您的第一个if语句。因为在你的if语句中,有一个十进制数和一个整数的乘法,结果将返回0,并且由于len2忽略了空格,fscanf()len1将至少为1

第四个错误:

此外,永远不会达到您的len2语句,因为如果字符串与另一个字符串具有相同的值,则它们的第一个字符也将彼此相等,并且您还将接受您比较其第一个字符的if语句。


实际上,我会编写一个代码作为解决方案,但首先你需要纠正逻辑上错误的东西,因为我不知道你的代码真正试图实现什么 - 只是因为我充满了假设的评论 - 。但我可以为你提供一些指导:

  1. 将您的else iflen1变量从len2转换为int,并将从float函数返回的值转换为strlen()
  2. 为每次外循环迭代重新打开float文件。 (别忘了不要关闭它。)
  3. 要更改dict文件,您可以使用inp类型的变量来跟踪fpos_t文件的位置指示符(inp)以获取当前位置,{ {1}}更改fgetpos()变量值的位置。您可以搜索它们。)并在该位置输入fsetpos()fpos_t来更改该字符串。