2013-12-12 48 views
0

我能解决这个问题,感谢所有帮助我解决问题的人。用另一个字符串替换字符串中的值

+3

你说的问题是,当你有要使用的代码时,代码不会编译。难道你不认为提供不编译的代码以及编译尝试时提供的错误输出是一个超级想法吗? – mah

+0

对不起,我添加了其他部分。这是我第一次使用这个网站。 – user3096716

+0

当你尝试编译时,你得到的错误是什么?当涉及到复制字符串时,你会遇到一个问题,“word [i] = dictn [j]'只会分配指针,而不是复制单词中的实际字符。 – Macattack

回答

1

您可以使用

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

如果您的代码正在与printf的应该与sprintf的工作,只要你不溢出“词”,包括NULL终止,所以您可能必须调整“字“如果它小于dictn。

+0

谢谢,我会尽力的!但是,你能解释一下sprintf做什么?它是否与fprintf相同? – user3096716

+0

sprintf的工作方式与printf类似,但是它会打印到字符串而不是标准输出(在本例中打印到名为“word”的字符串)。很高兴看到“单词”和“单词”的声明。处理您遇到的问题最安全的方法是逐字阅读空格,制表符或换行符,因为您从文件中读取的方式有可能会溢出“word”或“dictn”,如果用户为您的程序提供一个文本文件,其中包含一个非常长的不间断字符序列,您的程序会崩溃或产生一些随机行为 –

0

首先,我假设你已经创建了具有足够大小的数组worddictn以保存任何文件的最大长度字符串。

第一次故障:

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

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

第二次故障:

我假设你想读整部字典文件中输入文件的每一个字,但你将能够读取它的输入文件,因为你不打开它的唯一的第一个字或在读完整本字典后,在字典文件的开头设置位置指示符。

三错:

你的第一个if语句将永远不会达到假设你已经创建len1len2变量为整数。因为在你的if语句,有小数数目的乘积的整数,将返回0,结果,自fscanf()忽略空格,len1len2将至少为1

第四故障:

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


事实上,我会写代码解决方案,但首先你需要正确的事情了其在逻辑上是错误的,因为我不知道你真正尝试通过代码来实现 - 只是因为我评论充满假设 - 。但我可以为您提供一些指导原则:

  1. 将您len1len2变量从intfloat和投值,其返回从strlen()功能float
  2. 重新打开您的dict文件进行外部循环的每次迭代。 (并且不要忘记不要关闭它)。
  3. 要改变你的inp文件,你可以使用一个fpos_t类型的变量来跟踪你inp文件的位置指示器(fgetpos()获得当前位置和fsetpos()改变位置fpos_t变量的值,你可以搜索他们。)和键入单词fprintf()fputs()到该位置以更改该字符串。
相关问题