【发布时间】:2015-07-18 16:45:23
【问题描述】:
虽然这段代码很可怕,而且我显然错误地解决了这个问题,但这段代码仍然有效(目前)。我想搞砸它,但我真的不知道我在这里做错了什么。目标是不使用任何内置函数,将字符串“This is a test”替换为“gho”以拼出“This is a ghost”。
int main(int argc, const char * argv[]) {
char *s = "This is a test";
char *newstring = malloc(strlen(s));
for (int i = 0 ; s[i] != '\0' ; i++){
if (s[i] == 't' && s[i+1] == 'e') {
newstring[i] = 'g';}
else if (s[i] == 'e' && s[i+1] == 's') {
newstring[i] = 'h';}
else if (s[i] == 's' && s[i+1] == 't') {
newstring[i] = 'o';
}
else if (s[i] == 't') {
newstring[i] = 's';
}
else {
newstring[i] = s[i];
}
}
printf("%st",newstring);
return 0;
}
我的问题是我不知道如何将字符附加到 C 中的新字符串中,以便在替换单个字符的同时保持原始字符串的完整性。
【问题讨论】:
-
您的问题是什么?是“如何将字符附加到 C 中的新字符串”?
-
@user3121023 这是真的,我已经在我的代码中调整了它。在我的打印语句中,我必须在末尾手动添加一个“t”;我该怎么做才能避免这样做?我尝试在最后一个 else if 语句下添加代码来说明这一点,除了 newstring[i] = 's';新字符串[i+1] = 't'。那没用。
-
我会将其拆分为三个函数:“在字符串中查找“te””、“在字符串中的某个位置写入“gho””和“将一个字符串的一部分复制到另一个字符串上。通过拆分它,我敢打赌复杂性会立即下降。
-
@MooingDuck 听起来是解决它的好方法。我的问题是我对 C 完全陌生,不知道如何实现它!关于将一个字符串的一部分“复制”到另一个字符串,我在上面通过将索引值设置为彼此来做到这一点。不确定如何在字符串中搜索多个字符并注意它们存在于哪些索引处。我基本上可以说“将导致'te'的字符串部分复制到新字符串”。然后,“忽略'te'并插入'gho'”。然后,“将 'te' 之后的所有内容复制到新字符串中”。它只是在实际执行它......
-
您声明代码不能使用任何系统函数,但发布的代码使用 strlen()、malloc() 和 printf() 顺便说一句:C 没有任何内置功能来执行任何输入/输出。这就是为什么几乎总是需要像 stdio.h 和 stdlib.h 这样的库。 C 没有任何内置的能力来执行任何字符串操作。这就是为什么几乎总是需要像 string.h 这样的库。