删除字符子串
1. 简述
从一个字符串中,删除另一个字符串中出现过的所有字符。基本上比较简单,主要就是要保存的字符放到合适的位置,要删除的字符最后要释放掉,还有就是'\0'的处理。
2. 代码
#include <iostream>
using namespace std;
bool find(const char* cs, const char ch) {
assert(cs != 0);
while('\0' != *cs && ch != *cs)
cs++;
if('\0' == *cs)
return false;
else
return true;
}
void delete_str(char *str, const char* cs) {
assert(str != 0 && cs != 0);
char * result = str;
int gap, len; gap = len = 0;
while(*str != '\0') {
if(find(cs, *str)) { // 放弃该字符
gap++; // 删除的字符个数
}
else { // 保存该字符
len++; // 保留的字符个数
*(str-gap) = *str;
}
str++;
}
*(result+len) = '\0'; // '\0'处理
for(int i=0; i<gap; i++) // 释放内存
delete (result+len+i+1);
}
int main() {
char str[100] = {'h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '.'};
char cs[5] = "lo";
cout << str << endl;
cout << cs << endl;
delete_str(str, cs);
cout << str << endl;
system("PAUSE");
return 0;
using namespace std;
bool find(const char* cs, const char ch) {
assert(cs != 0);
while('\0' != *cs && ch != *cs)
cs++;
if('\0' == *cs)
return false;
else
return true;
}
void delete_str(char *str, const char* cs) {
assert(str != 0 && cs != 0);
char * result = str;
int gap, len; gap = len = 0;
while(*str != '\0') {
if(find(cs, *str)) { // 放弃该字符
gap++; // 删除的字符个数
}
else { // 保存该字符
len++; // 保留的字符个数
*(str-gap) = *str;
}
str++;
}
*(result+len) = '\0'; // '\0'处理
for(int i=0; i<gap; i++) // 释放内存
delete (result+len+i+1);
}
int main() {
char str[100] = {'h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '.'};
char cs[5] = "lo";
cout << str << endl;
cout << cs << endl;
delete_str(str, cs);
cout << str << endl;
system("PAUSE");
return 0;
}
3. 备注
主要考查基本的C++编程,难度不大。