c++ - 使用指针替换 C 字符串中的字符

标签 c++ c pointers

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

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

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

给出以下主要内容:

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

我的解决方案看起来很复杂/不好的做法/而且丑陋。我可以通过使用引用和添加 *(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 是从哪里来的。

最佳答案

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

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

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

"XYXYCS280ISAWXYSOMXYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈”

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

<小时/>

问题在于您没有明确以 null 终止字符串。

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

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

*R = '\0';

关于c++ - 使用指针替换 C 字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485929/

相关文章:

c++ - 适用于 STL 容器的简单 C++ 模板

c++ - FLTK 等待事件关闭窗口

c - 程序立即以退出代码 0 结束——但它不应该在没有输入的情况下到达那里

c - 错误 C2143 : syntax error : missing ')' before '*'

c - 获得无限循环而不是预期的受控迭代

c++ - 为什么我的节点在使用 free() 或 delete 时没有被删除

C端结构表

c++ - 一个char和一个int相加的结果是什么?

c++ - C++单例中的指针和非指针实例

C++:如何将一个函数(不知道其参数)传递给另一个函数?