【发布时间】:2016-03-01 18:42:15
【问题描述】:
现在我可以用nonchalant 替换给定字符串中的单词indifferent,但我需要使这个函数动态,所以indifferent 可以替换为任何单词。我知道我需要使用 malloc 创建一个新数组,该数组将使用新单词保存我的原始字符串,但对如何使用 malloc 还没有深入了解,请解释如何在这种情况下正确使用 malloc。谢谢。
#include <stdio.h>
#include <stdlib.h>
int findPosition(char string[], char sub[]) {
int i = 0;
int j = 0;
int f = 0;
for (i = 0; string[i] != '\0'; i++) {
if (sub[j] == string[i]) {
if (sub[j + 1] == '\0') {
f = 1;
break;
}
j++;
} else
j = 0;
}
if (f == 1) {
return i - j;
}
return -1;
}
int findLength(char sub[]) {
int i = 0;
for (i = 0; sub[i] != '\0'; i++) {
}
return i;
};
void replaceWord(char string[], char sub[], char replace[]) {
int i = 0;
int j = 0;
int p = findPosition(string, sub);
int l = findLength(sub);
int k = p + l - 1;
for (i = p; i < k; i++) {
string[i] = replace[j];
j++;
}
while(string[k] != '\0') {
string[k] = string[k + 1];
k++;
}
}
int main(int argc, const char *argv[]) {
char stringArray[120] = "\"Mr.Fay, is this going to be a battle of wits? \""
"\t\"If it is,\" was the indifferent retort, \""
"you have come unarmed!\"";
replaceWord(stringArray, "indifferent", "nonchalant");
int i = 0;
while (stringArray[i] != '\0') {
printf("%c", stringArray[i]);
i++;
}
return 0;
};
【问题讨论】:
-
malloc()函数与字符串替换无关;它所做的只是分配内存。您将它们混合在一起表明您在将问题分解为更小、易于管理(定义明确)的任务方面做得不够。离开键盘,想想你的问题(也许手头有一张白纸和一支铅笔),分解它,然后整理自己——这对你的帮助远远超过任何人的回应。