正在加载图片...
第2章数组 2-14字符串的替换操作 replace( String&s, String&t, String&v是指:若t是s的子串,则用串ⅴ替换 串t在串s中的所有出现;若t不是s的子串,则串s不变。例如,若串s为“ aabbabcbaabaaacbab”,串 t为bab”,串v为“abdc”,则执行 replace操作后,串s中的结果为“ aababdccbaabaaacabdc”。试利用字 符串的基本运算实现这个替换操作。 【解答】 String String Replace String t String &v)( if(( int id= Find(t))=-1 ∥没有找到,当前字符串不改,返回 t cout <<The(replace) operation failed. "< endl; return*this; String temp( ch )i /用当前串建立一个空的临时字符串 curLen =0: ∥当前串作为结果串,初始为空 ∥存放结果串的指针 while( id I=-1)t for(j=0;j<id;j+)chk+]= temp. ch[j;∥摘取 temp.ch中匹配位置 if( curLen+ id+vcurLen <= maxLen ∥确定替换串v传送字符数1 arLen- id for (j=0;j<l;j++)ch(k++]=vchn] ∥连接替换串ⅴ到结果串ch后面 ∥修改结果串连接后的长度 ∥字符串超出范围 for (j=id+ t curLen; j<temp. curLen; j++) temp. ch[- id-tcurlen= temp.ch0; ∥删改原来的字符串 id= temp. Find(t); return *this 2-15编写一个算法 frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数 据来验证这个算法 【解答】 include <iostream h> void frequency( String& s, char& A[l, int& C[ ], int &k)t ∥s是输入字符串,数组A[中记录字符串中有多少种不同的字符,C[]中记录每 ∥种字符的出现次数。这两个数组都应在调用程序中定义。k返回不同字符数。 int i, j, len =s length( ) if !len)i cout <<"The string is empty. " < endl:: k=0; return; 3第 2 章 数组 19 2-14 字符串的替换操作 replace (String &s, String &t, String &v)是指:若 t 是 s 的子串,则用串 v 替换 串 t 在串 s 中的所有出现;若 t 不是 s 的子串,则串 s 不变。例如,若串 s 为“aabbabcbaabaaacbab”,串 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; } 2-15 编写一个算法 frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数 据来验证这个算法。 【解答】 include <iostream.h> 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; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有