您的当前位置:首页正文

【优质文档】实验报告4 (5000字)-精选word文档 (10页)

2021-12-20 来源:好走旅游网
【优质文档】实验报告4 (5000字)-精选word文档

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!

== 本文为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 = iplaceholdersAmount ? ds->placeholders[i].start - 1 : strlen(ds->source)-1; for(j=start; j<=end; j++,k++) {// 源字符串中不用替换的部分 ds->target[k] = ds->source[j]; ds->replaceMark[k] = ' '; }

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软件的使用,加深的了对串的操作的理解。 这次实验 报告 由于自己的原因没有在上传时间内上传,是拖延症的毛病在作祟,坚决不会再犯了。

    

荐 计算机上机实验内容及实验报告要求 荐 构建学校德育管理与评价体系的实验报告 荐 化学实验报告格式

荐 大学物理实验课程设计实验报告 荐 电路实验报告要求

因篇幅问题不能全部显示,请点此查看更多更全内容