【问题标题】:Replace value in string with another from another string用另一个字符串中的另一个值替换字符串中的值
【发布时间】:2013-12-31 08:32:57
【问题描述】:

感谢所有帮助我解决问题的人。

【问题讨论】:

  • 您说的问题是,当您拥有要使用的代码时,该代码无法编译。您不认为提供无法编译的代码以及尝试编译时提供的错误输出是一个好主意吗?
  • 对不起,我添加了另一部分。这是我第一次使用这个网站。
  • 尝试编译时遇到的错误是什么?在复制字符串时也会遇到问题,word[i]=dictn[j] 只会分配指针,而不是复制单词中的实际字符。
  • 错误信息是什么?
  • 如果worddictn 都是char 的数组,那么我看不到strncmpstrcmp 调用在这里是如何工作的。 strncmp(word, dictn, 1) 将比较两个单词的第一个字符。如果返回 0 以外的值,则表示第一个字符不同。发生这种情况时,我看不出strcmp(word, dictn) 怎么可能返回 0。

标签: c arrays string replace


【解决方案1】:

你可以使用

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

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

【讨论】:

  • 谢谢,我会试试的!但是你能解释一下 sprintf 是做什么的吗?和 fprintf 一样吗?
  • sprintf 的工作方式与 printf 类似,但它打印到字符串而不是标准输出(在示例中打印到名为“word”的字符串)。很高兴看到“word”和“dictn”的声明。处理您遇到的问题的最安全方法是逐个字符地读取空格、制表符或换行符,因为如果用户从文件中读取的方式可能会溢出“word”或“dictn”为您的程序提供一个包含很长的不间断字符序列的文本文件,您的程序会崩溃或出现一些随机行为
【解决方案2】:

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

第一个错误:

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

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

第二个错误:

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

第三个错误:

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

第四错:

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


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

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

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2019-05-14
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多