1. 根据删除字符串s中出现字符c 的复制思想,写了以下代码。
#include <stdio.h>
char * squeeze(char s1[], char s2[]);
main()
{
//int i;
char str1[80], str2[80];
printf("input the string :");
scanf("%s %s", str1, str2);
//squeeze(str1, str2);
printf("%s\n",squeeze(str1, str2));
}
char * squeeze(char s1[], char s2[])
{
int i, j, k;
for(i = k = 0; s1[i] != '\0'; ++i)
for(j = 0; s2[j] != '\0'; ++j)
if(s1[i] != s2[j]) //
s1[k++] = s1[i];
s1[k] = '\0';
return s1;
}
Q1: if(s1[i] != s2[j]) ,当出现有一个不相等的字符 就执行了 s1[k++] = s1[i],应该是s1[i]对与字符串s2中所有的字符都不相等时才可以执行这句。
A1: 第二个循环执行到字符串s2结束或找到一个匹配字符为止。如果没有找到匹配的字符,s1[i]就将被复制到结果字符串中。
{
for(j = 0; s2[j] != '\0' && s2[j] != s1[i]; ++j)
; //如果不相等 什么都不做
if(s2[j] == '\0')
s1[k++] = s1[i];
}
s1[k] = '\0';
2 . 用了标志位。
/* squeeze2: delete all characters occurring in s2 from string s1. */
void squeeze2(char s1[], char s2[])
{
int i, j, k;
int instr2 = 0;
for(i = j = 0; s1[i] != '\0'; i++)
{
instr2 = 0;
for(k = 0; s2[k] != '\0' && !instr2; k++)
{
if(s2[k] == s1[i])
{
instr2 = 1;
}
}
if(!instr2)
{
s1[j++] = s1[i];
}
}
s1[j] = '\0';
}