5-1 字符串的替换操作replace (String &s, String &t, String &v...5-1 字符串的替换操作replace (String &s, String &t, String &v...
第2章 数组
5-1 字符串的替换操作replace (String &s, String &t, String &v)是指:若t是s的子串,则用串v替换
“aabbabcbaabaaacbab”,串串t在串s中的所有出现;若t不是s的子串,则串s不变。例如,若串s为t为“bab”,串v为“abdc”,则执行replace操作后,串s中的结果为“aababdccbaabaaacabdc”。试利用字
符串的基本运算...
5-1 字符串的替换操作replace (String &s, String &t, String &v...
第2章 数组
5-1 字符串的替换操作replace (String &s, String &t, String &v)是指:若t是s的子串,则用串v替换
“aabbabcbaabaaacbab”,串串t在串s中的所有出现;若t不是s的子串,则串s不变。例如,若串s为t为“bab”,串v为“abdc”,则执行replace操作后,串s中的结果为“aababdccbaabaaacabdc”。试利用字
符串的基本运算实现这个替换操作。
【解答】
String & String :: Replace ( String & t, String &v) {
if ( ( int id = Find ( t ) ) == -1 ) //没有找到,当前字符串不改,返回
{ cout << "The (replace) operation failed." << endl; return *this; }
String temp( ch ); //用当前串建立一个空的临时字符串
ch[0] = '\0'; curLen = 0; //当前串作为结果串,初始为空
int j, k = 0, l; //存放结果串的指针
while ( id != -1 ) {
for ( j = 0; j < id; j++) ch[k++] = temp.ch[j]; //摘取temp.ch中匹配位置
if ( curLen+ id + v.curLen <= maxLen )
l = v.curLen; //确定替换串v传送字符数l
else l = maxLen- curLen- id;
for ( j = 0; j < l; j++ ) ch[k++] = v.ch[j]; //连接替换串v到结果串ch后面
curLen += id + l; //修改结果串连接后的长度
if ( curLen == maxLen ) break; //字符串超出范围
for ( j = id + t.curLen; j < temp.curLen; j++ )
temp.ch[j- id - t.curLen] = temp.ch[j]; //删改原来的字符串
temp.curLen -= id + t.curLen;
id = temp.Find ( t );
}
return *this;
}
5-2 编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
【解答】
include
include "string.h"
void frequency( String& s, char& A[ ], int& C[ ], int &k ) {
// s是输入字符串,数组A[ ]中记录字符串中有多少种不同的字符,C[ ]中记录每
//一种字符的出现次数。这两个数组都应在调用程序中定义。k返回不同字符数。
int i, j, len = s.length( );
if ( !len ) { cout << "The string is empty. " << endl; k = 0; return; }
else { A[0] = s[0]; C[0] = 1; k = 1; /*语句s[i]是串的重载操作*/
for ( i = 1; i < len; i++ ) C[i] = 0; /*初始化*/
for ( i = 1; i < len; i++ ) { /*串中所有字符*/
j = 0;
while ( j < k && A[j] != s[i] ) j++; /*检查s[i]是否已在A[ ]中*/
if ( j == k ) { A[k] = s[i]; C[k]++; k++ } /*s[i]从未检测过*/
5
第2章 数组
else C[j]++; /*s[i]已经检测过*/
}
}
}
测试数据 s = "cast cast sat at a tasa\0"
A c a s t b 测试结果
C 2 7 4 5 5
【另一解答】
include
include "string.h"
const int charnumber = 128; /*ASCII码字符集的大小*/
void frequency( String& s, int& C[ ] ) {
// s是输入字符串,数组C[ ]中记录每一种字符的出现次数。
for ( int i = 0; i < charnumber; i++ ) C[i] = 0; /*初始化*/
for ( i = 0; i < s.length ( ); i++ ) /*检测串中所有字符*/
C[ atoi (s[i]) ]++; /*出现次数累加*/
for ( i = 0; i < charnumber; i++ ) /*输出出现字符的出现次数*/
if ( C[i] > 0 ) cout << "( " << i << " ) : \t" << C[i] << "\t";
}
5-3 设串s为“aaab”,串t为“abcabaa”,串r为“abc aabbabcabaacbacba”,试分别计算它们的失效数
f (j)的值。
【解答】
j 012 3 j 0 1 2 3 45 6
s a a ab t a b ca b a a
-1- 1 -1 -1 -1 f (j) 0 1 0 f (j) 0 1 0
6
第2章 数组
7
本文档为【5-1 字符串的替换操作replace (String &s, String &t, String &v...】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。