这不是家庭作业,而是研究期中考试。
我不能使用任何类型的数组索引,例如str [i]或*(str + i)
我必须使用c-string“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
来自哪里。
答案 0 :(得分:0)
由于这是一个研究问题,这里有一个提示让你入门。尝试初始化结果数组。我这样做了:
char result[256];
for (int i = 0; i < 250; ++i)
result[i] = 'a';
result[250] = 0;
现在再次运行你的代码,你会发现你的输出结尾有很多'a'字符,直到你得到字符250.那就是你会看到:
“XYXYCS280ISAWXYSOMXYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
如果你想自己弄清楚其余部分,请立即停止阅读。
问题是你没有显式null终止你的字符串。
请注意,替换S的最后一个字符不是问题,而是使用while循环的终端条件。由于您没有手动复制S中的'\ 0'字符,因此您希望结果数组中包含'\ 0'字符,C和C ++不保证这些字符。
只需将以下行添加到substituteChar函数的末尾即可解决问题:
*R = '\0';
答案 1 :(得分: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++;
}
}
答案 2 :(得分:0)
您的代码完全正确并且出现小错误。有一个字符串,永远的事实 string应该以null字符终止。所以只需添加* R ='\ 0';在......的最后 而功能和这个算法完美地工作。