实验六字符及字符串处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六字符及字符串处理

一、实验目的

1.掌握头文件ctype.h的用法;

2.掌握常用函数isalpha、isdigit、isspace、isupper、islower、toupper、tolower等常用函数的使用。

3.掌握常用字符串处理函数strcmp、strcat等的模拟。

二、实验内容

1.字符处理练习。编写一个程序提示用户输入一系列字符,只提示一次。在循环中使用scanf(“%c”,…)语句,一次读入一个字符。根据输入内容生成如下输出结果:一次一行,回显输入字符;调用isalpha()检查是否为字母,若是调用touper()函数将其转换为大写字母,如果不是,则打印出一条错误信息,如果字符为句点,打印一条说明信息后退出。

2.回文。设计一个程序测试一条语句是否是回文:即从前向后读和从后向前读的字母都是相同的。首先提示用户输入一条语句。使用getchar一次读入所有字符,直至出现句号为止。读取过程中要求:(1)回显输入字符;(2)调用tolower()函数将每个字符转换成小写;(3)计算读入字符的个数(包括句号在内);(4)将转换后的字符保存在数组的下一个元素中。算法提示:从数组的结尾和开始位置一起比较字母。比较第1个和最后一个,第2个和倒数第2个,依此类推。如果有一对无法匹配,则退出循环后宣布该条语句不是回文。如果一直进行到语句中内始科没有出现问题,则停止然后宣布输入语句为回文。假设输入内容不会超过80个字符。

3.不用库函数模拟strcat和strcmp函数。

三、选做内容

1.检测字符。使用字符分类函数将字符分成几个类:大写字母、小写字母、数字、代白字符和其他符号。编写一个函数完成测试。在主函数中读取一系列字符,直至遇到句号为止。回显每个输入字符,并找印出相应的标注。计算每个类别出现的次数。处理句号的同时为句号计数,然后打印出字符总额并退出程序。算法提示:使用一个计数器数组,递增计数器时可用枚举常量作为数组的下标。

2.编写一个程序在表格中显示ASCII代码,类似附录中的ASCII表格。不要试图直接打印无法打印的字符,跳过列出十六进制代码的列。

四、常见错误

1.char和int。理论上讲,在C语言中,字符就是极短的整数。但在要领上又是一种独立的类型,有自己独立的操作和不同的输入输出方法。确保不要进行无谓的操作,例如两个字符相乘等;

2.字符输入。输入字符时,空白字符是可能造成困扰的原因。Scanf()对数字类型的输入转换处理自动跳过之前的空白字符,在读取第1个非空白字符时才开始存储数据。但是,无论是否空白字符,getchar()都返回第1个字符,带有“%c”的scanf也是一样。为了跳过之前的空白字符,必须使用带有“%c”限定词(格式中的百分号之前包括一个空格)的scanf()。如果遗漏了这个空格,程序就可能读取空白字符并试图将其翻译成为数据,这通常都会导致出现错误。因此,程序员必须清楚地知道自己想做什么(读取空白字符还是跤过空白字符),然后为任务选择恰当的输入机制。

实验七字符串(二)

一、实验目的

1.熟练掌握字符串的匹配查找。

2.熟练掌握字符串的插入操作。

3.熟练掌握字符串的压缩还原处理。

二、实验内容

1.改错题

以下程序对一个由字母和数字字符组成的字符串从头至尾作如下变换:

①若原字符串的当前字符不是数字字符,则将该字符复制到新字符串中;

②若当前字符是一个数字字符(设该数字字符的面值为n),且有后继字符,则将它

的后继字符重复复制n次到新字符串中(若后继字符是大写字母,则复制为对应的小写字母),并且被复制的后继字符不再作为当前字符进行判断和变换;

③若当前字符为一个数字字符,且没有后继字符,则将该字符复制到新字符串中;

④以上述一次变换为一组,在不同组之间插入一个下划线字符‘_’用于分隔。

例如:对字符串26A3T2的变换结果为:66_A_ttt_2。

void encode(char *ip, char *op)

{ char *outstr,c;

int k,n;

outstr=op;

while(*ip)

{ if ('0'<=*ip<='9'&&*(ip+1))

{ n=*ip-'0';

c=*++ip;

c= c>='a'&&c<='z' ? c : c+32;

for(k=0;k

*op++=c;

}

else *op++=*ip;

*op++='_'; ip++;

}

if(op>outstr) op--; *op='\0';

}

void main()

{char p[n]="26A3T2",line[100],*q=line;

encode(p,q);

q=line;

while(*q) putchar(*q++);

putchar('\n');

}

2.改错题

下列程序中函数divfun的功能是:对于s指向的一个含有数字字符和非数字字符的字符串(串长不超过80),将其中连续的数字字符转换为一个整数,如果连续的数字字符个数超过4个,则以4个数字字符为一组进行转换。将转换后的生成的整数依次存放到整型数组a中。函数返回放入a数组中整数的个数。例如,若输入的字符串为“c123yz45 ! 786* 56ab c 123456789”,则a数组中的数值分别为:(123,45,786,56,1234,5678,9)。

#include /* 增加#include */

void divfun(char *s,int a[]) /* 改为int divfun(char *s,int a[]) */

{ char *p=s;

int i=0,k,sum;

while(*p)

if(isdigit(*p))

{ sum=*p-'0'; p++; k=1;

while(isdigit(*p))

{k++;

if(k<=4) {sum=sum+*p-'0';p++;} /* 改为 sum=sum*10+*p-'0' */

else { a[i++]=sum;

k=1; sum=*p-'0'; p++;

}

}

a[i++]=sum;

}

相关文档
最新文档