练习2-4。编写squeeze(s1,s2)的替代版本,删除s1中与字符串s2中的任何字符匹配的每个字符。这来自K& R.
有人可以告诉我为什么我的代码没有打印任何内容吗?我尝试了一切&不知道如何使用GDB。非常感谢!
编辑:好吧,我只是错过了一个i ++而且它有效。你们在说什么?我在主要的印刷声明...... #includevoid squeeze(char s1[], char s2[]);
int main() {
char s1[100] = "hello";
char s2[100] = "pencil";
squeeze(s1, s2);
printf("s1 revised: %s\n", s1);
return 0;
}
void squeeze(char s1[], char s2[]) {
int i, j, k;
i = k = j = 0;
while (s1[i] != '\0') {
for (j = 0; s2[j] != '\0'; j++) {
if (s1[i] == s2[j]) {
k = i;
while (s1[k] != '\0') {
s1[k] = s1[(k + 1)];
//printf("***");
if (s1[k] == '\0') {
break;
}
k++;
}
break;
}
else {
continue;
}
}
}
}
答案 0 :(得分:2)
您的循环变量i
永远不会增加。
这是我适当管理的挤压。 两条更改的行有注释。
void squeeze(char s1[], char s2[]) {
int i, j, k;
i = k = j = 0;
for ( ; s1[i] != '\0'; i++) { /* INCREMENT i */
for (j = 0; s2[j] != '\0'; j++) {
if (s1[i] == s2[j]) {
k = i;
while (s1[k] != '\0') {
s1[k] = s1[(k + 1)];
/* printf("***"); */
if (s1[k] == '\0') {
break;
}
k++;
}
--i; /* BACK UP */
break;
}
else {
continue;
}
}
}
}
答案 1 :(得分:1)
因为包含任何打印语句的唯一行被注释掉了。