[分析:利用一个数组,该数组的下标为字符的ASCII值,来存储字符的状态,如果是要被删除的字符,则相应的数组元素置为true。然后通过遍历这个原字符串,对其中的每个字符检查其对应数组元素的状态。此处状态数组可理解为一种hash关系]
void RemoveChars(char * str, char * remove)
{
int len = strlen(remove);
int i = 0, pos = 0;
for(i = 0; i < len; i++)
{
flags[(int)remove[i]] = true;
}
len = strlen(str);
while(i < len)
{
if(!flags[(int)str[i]])
{
str[pos++] = str[i];
}
i++;
}
}
[分析:大体思路为先将待处理字符串整体反转,意思为最后一个字符与第一个字符互换,依次类推。然后在从头查找每一个单词,对每个单词进行反转操作]
void ReverseString(char str[], int start, int end)
{
char temp;
while(end > start)
{
temp = str[start];
str[start] = str[end;
str[end] = temp;
start++;
end--;
}
}
{
int start = 0, end = 0, length;
length = strlen(str);
ReverseString(str, start, length-1);
while( end < length)
{
if(str[end] != ' ')
{
start = end;
while(end < length && str[end] != ' ')
{
end++;
}
end--;
ReverseString(str, start, end);
}
end++;
}
}