本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
== 本文为word格式,下载后可方便编辑和修改! ==
实验报告4 (5000字)
实验报告
课程名称:指导老师: 成绩: 实验名称: 实验类型: 同组学生姓名: 一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 七、讨论、心得
二、实验内容和原理(必填) 四、操作方法和实验步骤 六、实验结果与分析(必填)
一、实验目的和要求
模拟采用占位符构造动态字符串的格式化方法
构造一句话,其中包含不定数量的用{}括起来的数字,如{0}、{1}、{2},并提示用户输入字符串,并按顺序替换包括花括号在内的数字,从而构造 出新的一句话,并打印输出,请编写算法实现。
编程验证作业四中4.17、4.28的算法实现(可选) 二、实验内容和原理 掌握编程工具的使用
掌握字符串数据结构在计算机上的实现 掌握通过计算机编程解决问题的基本方法 三、主要仪器设备
实验软件:visual studio 201X
【优质文档】实验报告4 (5000字)-精选word文档
四、操作方法和实验步骤 实验代码如下:
int parserToPositiveInteger(char str[], unsigned int i, unsigned int j) {
if(!str || i>j) return -1;
while(i<=j && (str[i]==' ' || str[i]=='\')) // 去掉前面的空白字符 i++;
while(j>=i && (str[j]==' ' || str[j]=='\')) // 去掉后面的空白字符 j--; if(i>j) return -1; else { int k;
for(k=i; k<=j; k++) // 检查是否全部数字字符
if(!('0'<=str[k] && str[k]<='9')) return -1; int n=0, p=1; for(k=j; k>=i; k--)
【优质文档】实验报告4 (5000字)-精选word文档
{// 字符串转换为数字 n += p*(str[k]-'0'); p *= 10; } return n; } // 占位符
struct Placeholder {
// 占位符编号 unsigned int index; // 占位符起始位置 unsigned int start; // 占位符结束位置 unsigned int end; };
/*采用占位符的动态字符串
占位符是指字符串中用 {} 括起来,括号了里面包含【一个正整数及任意空白字符】的子字符串。
如:\"{0}\都是合法的占位符。
占位符中的正整数必须【从 0 开始,并且连续(建议,但是不强制)】。 相同的占位符可以【出现多次】。如:
\"hello {0}, hello {1}. {1} has send a mail to {0}\" */
【优质文档】实验报告4 (5000字)-精选word文档
struct DynamicString {
// 原字符串(可以包含多行) char source[MAX_STRING_LENGTH]; // 占位符
struct Placeholder placeholders[MAX_PLACEHOLDER_AMOUNT]; // 占位符的总数
unsigned int placeholdersAmount; // 替换占位符的具体内容 char
replaceContent[MAX_PLACEHOLDER_AMOUNT][MAX_CONTENT_LENGTH]; // 替换后字符串
char target[MAX_STRING_LENGTH]; // 替换标记
char replaceMark[MAX_STRING_LENGTH]; }; /*
功能:初始化动态字符串 参数:
ds 动态字符串 返回:
如果参数非法(比如有空指针):返回 FALSE 如果初始化成功:返回 TRUE */
【优质文档】实验报告4 (5000字)-精选word文档
int init(struct DynamicString *ds) { if(!ds) return FALSE; unsigned int i, j;
printf(\"输入一动态字符串:\\n\"); gets(ds->source);
/***************** 寻找所有占位符 *****************/ds->placeholdersAmount = 0; for(i=0; ds->source[i]; i++) {
if(ds->source[i] == '{') {// 出现了占位符的开始标记 // 寻找占位符的结束标记 j = i;
while(ds->source[j] && ds->source[j] != '}') j++; if(ds->source[j] == '}') {// 出现了占位符的结束标记
int n = parserToPositiveInteger(ds->source, i+1, j-1); if(n >= 0)
{// 找到了一个合法的占位符
ds->placeholders[ds->placeholdersAmount].index = n; ds->placeholders[ds->placeholdersAmount].start = i; ds->placeholders[ds->placeholdersAmount].end = j;
【优质文档】实验报告4 (5000字)-精选word文档
ds->placeholdersAmount ++; // 跳过占位符 i = j; } } else { break; } } }
return TRUE; }
int comparePlaceholderByIndex(const void*a, const void*b) { return }
int comparePlaceholderByStart(const void*a, const void*b) { return } /*
功能:替换所有的占位符
参数: ((struct Placeholder*)a)->start - ((struct Placeholder*)b)->start; ((struct Placeholder*)a)->index - ((struct Placeholder*)b)->index; ds 动态字符串
【优质文档】实验报告4 (5000字)-精选word文档
返回:
参数非法(比如有空指针):返回-1
替换成功:替换的占位符的个数(一个正数)。 */
int replaceAll(struct DynamicString *ds) { if(!ds) return -1;
unsigned int i,j,k; unsigned int start,end;;
qsort(ds->placeholders, ds->placeholdersAmount, sizeof(ds->placeholders[0]), comparePlaceholderByIndex); for(i=0; i < ds->placeholdersAmount; i++) {// 输入替换内容 if(i==0 {
printf(\"输入第 %3d 个替换内容:\gets(ds->replaceContent[ds->placeholders[i].index]); } }
qsort(ds->placeholders, ds->placeholdersAmount, sizeof(ds->placeholders[0]), comparePlaceholderByStart); for(i=0,k=0; i <= ds->placeholdersAmount; i++) || ds->placeholders[i].index != ds->placeholders[i-1].index) {// 开始替换
start = i>0 ? ds->placeholders[i-1].end + 1: 0;
【优质文档】实验报告4 (5000字)-精选word文档
end = i if(i == ds->placeholdersAmount) continue; char *content ds->replaceContent[ds->placeholders[i].index]; for(j=0; content[j]; j++,k++) {// 占位符部分进行文本替换 ds->target[k] = content[j]; ds->replaceMark[k] = '^'; } } ds->target[k] = '\\0'; ds->replaceMark[k++] = '\\0'; return ds->placeholdersAmount; } = /* 功能:打印动态字符串 参数: 【优质文档】实验报告4 (5000字)-精选word文档 ds动态字符串 doPrintMark 是否打印出替换标记 */ void printReplacedResult(const struct DynamicString doPrintMark) { if(!ds) return; printf(\"%s\\n\if(doPrintMark) printf(\"%s\\n\} int main() { struct DynamicString dynamicString; if(init(&dynamicString)) { replaceAll(&dynamicString); printReplacedResult(&dynamicString, TRUE); // 可以执行多次替换 replaceAll(&dynamicString); printReplacedResult(&dynamicString, TRUE); *ds, int } return 0; 【优质文档】实验报告4 (5000字)-精选word文档 } 四、实验结果及分析 程序运行结果如下: 六:实验心得 通过这次实验,我更加熟悉了vs软件的使用,加深的了对串的操作的理解。 这次实验 报告 由于自己的原因没有在上传时间内上传,是拖延症的毛病在作祟,坚决不会再犯了。 荐 计算机上机实验内容及实验报告要求 荐 构建学校德育管理与评价体系的实验报告 荐 化学实验报告格式 荐 大学物理实验课程设计实验报告 荐 电路实验报告要求 因篇幅问题不能全部显示,请点此查看更多更全内容