0

这不是家庭作业,而是期中学习。

我不能使用任何类型的数组索引,例如 str[i] 或 *(str+i)

我必须使用 c 字符串“EECS280ISAWESOME”并将“E”替换为 c 字符串“XY”。我还必须允许“XY”变量的多个长度。

给出以下主要内容:

int main () {
    const char* S = "EECS280ISAWESOME";
    const char* P = "XY";
    char result[256];
    subsituteChar(S,P,'E', result);
    cout << result << endl;
} 

我的解决方案似乎很复杂/不好的做法/而且丑陋。我可以使用 deferencing 和 add 做得更好,*(R+1)但我认为这是不允许的。

void subsituteChar(const char* S, const char* P, char c, char* R) {
    while(*S != '\0') {
        if(*S == c) {
            const char* PP = P;
            while (*P != '\0') {
                *R = *P;
                R++;
                P++;
            }
            P = PP;
        } else {
            *R = *S;
            R++;
        }
        S++;
    }
}

这有效,但我留下了XYXYCS280ISAWXYSOMXY2. 我不知道奇怪2的东西是从哪里来的。

4

3 回答 3

0

由于这是一个学习问题,这里有一个提示可以帮助您入门。尝试初始化您的结果数组。我这样做了:

char result[256];
for (int i = 0; i < 250; ++i)
    result[i] = 'a';
result[250] = 0;

现在再次运行您的代码,您会看到输出末尾有很多“a”字符,直到您到达字符 250。也就是说,您将看到:

“XYXYCS280ISAWXYSOMXY啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

如果您想自己弄清楚其余部分,请立即停止阅读。


问题是您没有明确地为空终止您的字符串。

请注意,替换 S 的最后一个字符不是问题,而是您的 while 循环的终止条件。由于您没有从 S 手动复制 '\0' 字符,因此您希望结果数组中充满了 '\0' 字符,而 C 和 C++ 不能保证这一点。

只需将以下行添加到您的替代字符函数的末尾即可解决问题:

*R = '\0';

于 2013-10-21T03:56:31.810 回答
0

这适合吗?

#include<stdio.h>
int main () {
    const char* S = "EECS280ISAWESOME";
    const char* P = "XY";
    char result[256];
    while(*S)
    {
        if(*S=='E') 
            printf("XY");
        else 
            printf("%c", *S);
        S++;
    }
} 
于 2013-10-21T03:59:04.417 回答
0

您的代码是完全正确的以及小错误。string 有一个事实,每个字符串都应该以空字符结尾。所以只需添加 *R ='\0'; 在 while 函数结束时,该算法完美运行。

于 2013-10-21T06:42:27.570 回答