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++编程,难度不大。