如果在s
中找到toBlank
中的字符,则下面的函数应该替换#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* function blank replaces all characters in the parameter string s
* that are present in the parameter string toBlank with space characters.
* for example, if s were the string "abcdef" and toBlank the string
* "bde", then after calling this function, s would be "a c f" */
void blank(char *s, const char *toBlank){
int i=0, j=0;
while (s[i] != '\0'){
if (s[i] == toBlank[j]){
s[i] = ' ';
}else{
j++;
}
i++;
}
printf("%s", s);
}
int main(void){
blank("abcdef", "bde");
}
中的字符:
s
问题是,{{1}}永远不会被修改。有人可以解释发生了什么吗?
答案 0 :(得分:6)
你传递一个字符串文字(实际上是const)作为你的第一个参数,然后你尝试在函数中修改它。
请改为:
int main(void)
{
char s[] = "abcdef";
blank(s, "bde");
return 0;
}
答案 1 :(得分:3)
我认为你需要迭代toBlank中的字符。
void blank(char *s, const char *toBlank)
{
int i=0, j;
while (s[i] != '\0')
{
j = 0;
while(toBlank[j] != '\0')
{
if (s[i] == toBlank[j])
{
s[i] = ' ';
break;
}
else
{
++j;
}
}
++i;
}
printf("%s", s);
}
答案 2 :(得分:1)
/* there are stdlib functions for these kind of things */
#include <stdlib.h>
void blank(char *str, char * wits)
{
size_t pos,len;
for (pos=len=0; str[pos]; pos += len) {
len = strspn(str+pos, wits);
if (len) memset(str+pos, ' ', len);
else len = strcspn(str+pos, wits);
}
}
答案 3 :(得分:0)
难道你不希望j ++里面的if而不是else吗? 当你找到char
时我觉得你进步了