为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

5-1 字符串的替换操作replace (String &s, String &t, String &v...

2018-04-28 4页 doc 16KB 151阅读

用户头像

is_833902

暂无简介

举报
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...
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 &#40;String &s, String &t, String &v&#46;&#46;&#46;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索