我正在研究我的C期中的一些基本功能,并且我意识到我错误地复制了我的教师的例子。我现在可能已经太累了,无法想到这一点,我会非常感激。
void replace_last(char s[], int oldc, int newc){
size_t i, pos-1; /* I have no idea why I wrote pos-1. I know I need it though */
for(i = 0; s[i] != '\0'; i++){
if(s[i] == oldc)
pos == i;
if(pos != -1)
s[pos] = newc;
}
}
答案 0 :(得分:2)
在Ist if声明中你正在做pos==i
pos=i
因为pos==i
是条件语句而pos = i
是赋值
void replace_last(char s[], int oldc, int newc){
size_t i, pos=-1; /* I have no idea why I wrote pos-1. I know I need it though */
for(i = 0; s[i] != '\0'; i++){
if(s[i] == oldc)
pos = i;
if(pos != -1)
s[pos] = newc;
}
}
我认为您希望将oldc
替换为newc
,找到oldc
的位置,然后更改pos
的值,并在您正在进行的同一次迭代中s[pos]=new
将oldc
取代newc
现在代码很好..你可以运行它或干运行并检查它
答案 1 :(得分:2)
行号:5
pos==i
应替换为pos=i
答案 2 :(得分:1)
void replace_last(char s[], int oldc, int newc){
size_t i, pos = -1;
for(i = 0; s[i]; i++)
if(s[i] == oldc)
pos = i;
if(pos != -1)
s[pos] = newc;
}
因此,您复制的代码有三个问题:pos-1
,pos == i
,第三,逻辑if(pos != -1) s[pos] = newc;
需要在循环之外。
编辑:为了完善答案,“非手动”方式可以做到这一点,例如:
void replace_last(char s[], int oldc, int newc) {
if (strrchr(s, oldc))
*strrchr(s, oldc) = newc;
}
(如果你愿意的话,你可以将strrchr()
的返回保存在临时指针中,以避免第二次调用strrchr(),
,但这可能是不必要的:gcc与-O1
这会自动为你做这件事。)