字符串的处理实验

字符串的处理实验
字符串的处理实验

字符串的处理

一、实验目的

了解Java语言中字符串的操作和处理。

二、实验要求

1.掌握String类的特点及常用方法的使用

2.掌握StringBuffer类的特点及常用方法的使用

三、实验内容

1. 请将如下代码补充完整,String类中常用方法的使用。StringExample.java

class StringExample

{ public static void main(String args[])

{ String s1=new String("you are a student");

String s2=new String("how are you");

if(【代码1】) // 使用equals方法判断s1与s2是否相同

{

System.out.println("s1与s2相同");

}

else

{

System.out.println("s1与s2不相同");

}

String s3=new String("22030219851022024");

if(【代码2】) //判断s3的前缀是否是“220302”。

{

System.out.println("吉林省的身份证");

}

int position=0;

String path="c:\\java\\jsp\\A.java";

position=【代码3】//获取path中最后出现目录分隔符号\\ 的位置

System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position);

String fileName=【代码4】//获取path中“A.java”这个子字符串。

System.out.println("c:\\java\\jsp\\A.java中含有的文件名:"+fileName);

String s6=new String("100");

String s7=new String("123.678");

int n1= Integer.parseInt(s6); //将s6转化成int型数据。

double n2= Double.parseDouble(s7); //将s7转化成double型数据。

double m=n1+n2;

System.out.println(m);

String s8=【代码5】//调用String类的valueOf( )方法将m转化为字符串对象

position=s8.indexOf(".");

String temp=s8.substring(position+1);

System.out.println("数字"+m+"有"+temp.length()+"位小数") ;

String s9=new String("ABCDEF");

char a[]=【代码6】//将s8存放到数组a中。

for(int i=a.length-1; i>=0; i--)

{

System.out.print(" "+a[i]);

}

}

}

2.编写一个Java程序,完成以下功能:

(1)声明一个名为name 的String 对象,内容是“My name is Networkcrazy”;(2)打印字符串的长度;

(3)打印字符串中的第一个字符;

(4)打印字符串中的最后一个字符;

(5)打印字符串中的第一个单词;

(5)打印字符串中crazy的位置;

3.阅读程序功能:写出运行结果

public class Test

{

public static void main(String args[])

{

StringBuffer sb1=new StringBuffer("my age is 23 years");

StringBuffer sb2=new StringBuffer();

int i, result=0;

char ch;

for(i=0;i

{

ch=sb1.charAt(i);

if((ch>='0')&&(ch<='9'))

{

sb2.append(ch);

}

}

if(sb2.length()>0)

result=Integer.parseInt(sb2.toString());

System.out.println("The result is: "+result);

}

}

4. 若一个字符串正读和反读都一样,如level、noon等,就称之为回文。编写一个程序,验证输入的字符串是否为回文串。

5.输入一个字符串,统计其中有多少个单词?并输出这些单词。单词之间用空格或“,”分开。

6.编写程序,输入两个字符串,完成以下几个功能:

(1)求出两个字符串的长度。

(2)检验第一个串是否为第二个串的子串。

(3)把第一个串转化为byte类型并输出。

实验答案

1.class Test

{ public static void main(String args[])

{ String s1=new String("you are a student");

String s2=new String("how are you");

if(s1.equals(s2)) // 使用equals方法判断s1与s2是否相同

{

System.out.println("s1与s2相同");

}

else

{

System.out.println("s1与s2不相同");

}

String s3=new String("22030219851022024");

if(s3.startsWith("220302")) //判断s3的前缀是否是“220302”。

{

System.out.println("吉林省的身份证");

}

int position=0;

String path="c:\\java\\jsp\\A.java";

position=https://www.360docs.net/doc/a66650172.html,stIndexOf("\\");//获取path中最后出现目录分隔符号\\ 的位置

System.out.println("c:\\java\\jsp\\A.java中最后出现\\的位置:"+position);

String fileName=path.substring(12);//获取path中“A.java”这个子字符串。

System.out.println("c:\\java\\jsp\\A.java中含有的文件

名:"+fileName);

String s6=new String("100");

String s7=new String("123.678");

int n1= Integer.parseInt(s6); //将s6转化成int型数据。

double n2= Double.parseDouble(s7); //将s7转化成double型数据。

double m=n1+n2;

System.out.println(m);

String s8= String.valueOf(m);//调用String类的valueOf( )方法将m转化为字符串对象

position=s8.indexOf(".");

String temp=s8.substring(position+1);

System.out.println("数字"+m+"有"+temp.length()+"位小数") ;

String s9=new String("ABCDEF");

char a[]=s8.toCharArray(); //将s8存放到数组a中。

for(int i=a.length-1; i>=0; i--)

{

System.out.print(" "+a[i]);

}

}

}

2.public class Test {

public static void main(String[] args) {

String name = new String("My name is Networkcrazy");

System.out.println(name.length());

System.out.println(name.charAt(0));

System.out.println(name.charAt(22));

System.out.println(name.substring(0, 2));

System.out.println(name.indexOf("crazy"));

}

}

4.import java.io.*;

public class Test {

public static void main(String[] args)throws IOException {

InputStreamReader reader=new InputStreamReader(System.in);

BufferedReader input=new BufferedReader(reader);

System.out.println("请输入字符串");

String str=input.readLine();

StringBuffer oldstr=new StringBuffer(str);

StringBuffer newstr=oldstr.reverse();

String temp=new String(newstr);

if(str.equals(temp))

System.out.println(str+"是回文。");

else

System.out.println(str+"不是回文。");

}

}

5. import java.util.*;

public class Test {

public static void main(String[] args) {

String s="Friday,Saturday Sunday";

StringTokenizer stk=new StringTokenizer(s,", ");

System.out.println("共有"+ stk.countTokens()+"个单词,分别为:");

while(stk.hasMoreTokens()){

System.out.println(stk.nextToken());

}

}

}

6. import java.io.*;

public class Test {

public static void main(String[] args)throws IOException { InputStreamReader reader=new InputStreamReader(System.in);

BufferedReader input=new BufferedReader(reader);

System.out.println("请输入字符串1");

String str1=input.readLine();

System.out.println("请输入字符2");

String str2 = input.readLine();

if(str2.indexOf(str1)==-1)

System.out.println("字符串1不是字符串2的子串");

else

System.out.println("字符串1是字符串2的子串");

byte b[ ]= str1.getBytes();

for(int i=0;i

System.out.println(b[i]);

}

}

C语言课程设计报告---字符串处理

课程设计报告 课程设计题目:研究生初试录取 学生:俊 专业:计算机应用技术 班级: 1140302 指导教师:宋文琳 2012年 06 月 23日

目录 一)实验题目 (3) 二)实验目的 (3) 三)实验要求 (3) 四)实验思路 (4) 五)实验过程 (6) 六)实验调试和结果 (9) 七)实验小结 (13)

实验题目 字符串处理 (1)不使用系统库函数,编写多个函数实现; (2)定义字符数组存放字符串,从键盘输入; (3)调用不同的函数,实现字符串的连接、拷贝、比较、求字符串长度、对字符串字符进行排序、查找字符串中某个字符是否存在; (4)分别输出以上字符串处理的结果。 二)实验目的 本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。三)实验要求 1. 学生独立完成课程设计的主要容; 2. 按照实验课表安排进行,不得无故旷课; 3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据 个人兴趣选做其它题目; 4.严格按照报告格式撰写课程设计报告; 5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。

四)实验思路1)整体思路

五)实验过程 代码: #include void main() {void lianjie(char a[],char b[]); void kaobei(char a[],char b[]); void bijiao(char a[],char b[]); void qiuchangdu(char a[],char b[]); void paixu(char a[],char b[]); void chazhao(char a[],char b[],char c); char str1[50],str2[40]; char t; int i; printf("需要进行的操作:1.连接;2.拷贝;3.比较;4.求长度;5.排序;6.查找\n"); scanf("%d",&i); if(i==1) {printf("要连接的字符串1:"); scanf("%s",str1); printf("要连接的字符串2:"); scanf("%s",str2); lianjie(str1,str2);} else if(i==2) {printf("拷贝的字符串1:"); scanf("%s",str1); printf("要拷贝的字符串2:"); scanf("%s",str2); kaobei(str1,str2);} else if(i==3)

语音识别系统实验报告材料

语音识别系统实验报告 专业班级:信息安全 学号: 姓名:

目录 一、设计任务及要求 (1) 二、语音识别的简单介绍 2.1语者识别的概念 (2) 2.2特征参数的提取 (3) 2.3用矢量量化聚类法生成码本 (3) 2.4VQ的说话人识别 (4) 三、算法程序分析 3.1函数关系 (4) 3.2代码说明 (5) 3.2.1函数mfcc (5) 3.2.2函数disteu (5) 3.2.3函数vqlbg (6)

3.2.4函数test (6) 3.2.5函数testDB (7) 3.2.6 函数train (8) 3.2.7函数melfb (8) 四、演示分析 (9) 五、心得体会 (11) 附:GUI程序代码 (12) 一、设计任务及要求 实现语音识别功能。 二、语音识别的简单介绍

基于VQ的说话人识别系统,矢量量化起着双重作用。在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。在识别(匹配)阶段,我们用VQ方法计算平均失真测度(本系统在计算距离d时,采用欧氏距离测度),从而判断说话人是谁。 语音识别系统结构框图如图1所示。 图1 语音识别系统结构框图 2.1语者识别的概念 语者识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用电话网络还可实现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,

实验三 数组和字符串

实验三数组和字符串 一、实验目的 1.掌握Java中的数组定义、引用 2.掌握向量的基本概念和应用技术 3.掌握使用字符串String类处理字符串的方法 4.掌握使用字符串StringBuffer类处理字符串的方法 5.掌握Date类以及Calendar类的常用方法; 二、实验内容 1.使用https://www.360docs.net/doc/a66650172.html,ng.Math类,生成100 个100~999 之间的随机整数,找出他们之中的最大的和最小的,并统计随机产生的大于300 的整数个数。 package exercise; publicclass shiyan3_1 { publicstaticvoid main(String [] args) { int count=0; int max=0; int min=Integer.MIN_VALUE; int num[]=newint[100];//声明并创建一个具有100 个元素的整型数组对象num int i; for(i=1;i<=100;i++) { num[i-1]=100+(int)(Math.random()*899); System.out.print(num[i-1]+"\t");//随机产生一个100~999 之间的随机整数 if(i % 10 == 0) System.out.println();//输出当前产生的随机数,并一行输出10 个数 if(num[i-1]>max) max=num[i-1]; if(num[i-1]300) count++; } System.out.println("最大的随机整数是:"+max); System.out.println("最小的随机整数是:"+min); System.out.println("大于300 的整数个数是:"+count); } }

语音信号处理实验报告

语音信号处理实验 班级: 学号: 姓名: 实验一基于MATLAB的语音信号时域特征分析(2学时)

1)短时能量 (1)加矩形窗 a=wavread('mike.wav'); a=a(:,1); subplot(6,1,1),plot(a); N=32; for i=2:6 h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数En subplot(6,1,i),plot(En); if(i==2) ,legend('N=32'); elseif(i==3), legend('N=64'); elseif(i==4) ,legend('N=128'); elseif(i==5) ,legend('N=256'); elseif(i==6) ,legend('N=512'); end end

00.51 1.52 2.5 3 x 10 4 -1 1 x 10 4 024 x 10 4 05 x 10 4 0510 x 10 4 01020 x 10 4 02040 (2)加汉明窗 a=wavread('mike.wav'); a=a(:,1); subplot(6,1,1),plot(a); N=32; for i=2:6 h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数En subplot(6,1,i),plot(En); if(i==2), legend('N=32'); elseif(i==3), legend('N=64'); elseif(i==4) ,legend('N=128');

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

实验3MATLAB矩阵分析与处理和字符串操作实...

实验三 MATLAB 矩阵分析与处理、字符串操作 一、实验目的 1.掌握生成特殊矩阵的方法 2.熟练掌握矩阵的特殊操作及一些特殊函数 3.熟练掌握MATLAB 的字符串操作 4.掌握MATLAB 矩阵的关系运算及逻辑运算法则 二、实验内容 1.特殊矩阵分析与处理操作 常用的产生通用特殊矩阵的函数有:zeros( );ones( );eye( );rand( );randn( ). 下面建立随机矩阵。 (1) 在区间[20,50]内均匀分布的5阶随机矩阵。 (2) 均值为0.6、方差为0.1的5阶随机矩阵。 说明:产生(0 ,1)区间均匀分布随机矩阵使用rand 函数,假设得到了一组满 足(0,1)区间均匀分布的随机数x i ,则若想得到任意[a,b]区间上均匀分布的随机数,只需要用i i x a b a y )(-+=计算即可。产生均值为0、方差为1的标准正态分布随机矩阵使用randn 函数,假设已经得到了一组标准正态分布随机数x i ,如果想要更一般地得到均值为i i x y ,、σμσμ+=可用的随机数方差为2计算出来。针对本例,命令如下: x=20+(50-20)*rand(5) y=0.6+sqrt(0.1)*randn(5) 建立对角阵。 diag( )函数除了可以提取矩阵的对角线元素以外,还可以用来建立对角矩阵。 设V 为具有m 个元素的向量,diag(V)将产生一个m*m 对角矩阵,其主对角线元素即为向量V 的元素。例如: diag([1,2,-1,4])

ans= 40000 10000 20000 1 diag(V)函数也有另一种形式diag(V ,k),其功能是产生一个n*n(n=m+|k|)的对角矩阵,其第k 条对角线的元素即为向量V 的元素。例如: diag(1:3,-1) ans=03000 0200 0010 000 矩阵的旋转 函数rot90(A,k)表示将矩阵A 以90度为单位对矩阵按逆时针方向进行k 倍的旋转。 rem 与mod 函数的区别 练习: 1> 写出完成下列操作的命令。 (1)建立3阶单位矩阵A 。eye(3) (2)建立5*6随机矩阵A ,其元素为[100,200]范围内的随机整数。 A=100+(200-100)*rand(5,6) (3)产生均值为1,方差为0.2的500个正态分布的随机数。 B=1+sqrt(0.2)*randn(50,10) (4)产生和A 同样大小的零矩阵。 zeros(size(A)) (5)将矩阵A 主对角线的元素加30。 B=eye(5,6)*30 A+B (6)从矩阵A 提取主对角线元素,并以这些元素构成对角阵。 B=diag(diag(A)’) 注:转置是把列向量转变成行向量。 2> 先建立5*5的矩阵A ,然后将A 的第一行元素乘以1,第二行元素乘以2,…,第五行乘以5。(提示:用一个对角矩阵左乘一个矩阵时,相当于用对角阵的

语音信号处理实验报告

通信与信息工程学院 信息处理综合实验报告 班级:电子信息工程1502班 指导教师: 设计时间:2018/10/22-2018/11/23 评语: 通信与信息工程学院 二〇一八年 实验题目:语音信号分析与处理 一、实验内容 1. 设计内容 利用MATLAB对采集的原始语音信号及加入人为干扰后的信号进行频谱分析,使用窗函数法设计滤波器滤除噪声、并恢复信号。 2.设计任务与要求 1. 基本部分

(1)录制语音信号并对其进行采样;画出采样后语音信号的时域波形和频谱图。 (2)对所录制的语音信号加入干扰噪声,并对加入噪声的信号进行频谱分析;画出加噪后信号的时域波形和频谱图。 (3)分别利用矩形窗、三角形窗、Hanning窗、Hamming窗及Blackman 窗几种函数设计数字滤波器滤除噪声,并画出各种函数所设计的滤波器的频率响应。 (4)画出使用几种滤波器滤波后信号时域波形和频谱,对滤波前后的信号、几种滤波器滤波后的信号进行对比,分析信号处理前后及使用不同滤波器的变化;回放语音信号。 2. 提高部分 (5)录制一段音乐信号并对其进行采样;画出采样后语音信号的时域波形和频谱图。 (6)利用MATLAB产生一个不同于以上频段的信号;画出信号频谱图。 (7)将上述两段信号叠加,并加入干扰噪声,尝试多次逐渐加大噪声功率,对加入噪声的信号进行频谱分析;画出加噪后信号的时域波形和频谱图。 (8)选用一种合适的窗函数设计数字滤波器,画出滤波后音乐信号时域波形和频谱,对滤波前后的信号进行对比,回放音乐信号。 二、实验原理 1.设计原理分析 本设计主要是对语音信号的时频进行分析,并对语音信号加噪后设计滤波器对其进行滤波处理,对语音信号加噪声前后的频谱进行比较分析,对合成语音信号滤波前后进行频谱的分析比较。 首先用PC机WINDOWS下的录音机录制一段语音信号,并保存入MATLAB软件的根目录下,再运行MATLAB仿真软件把录制好的语音信号用audioread函数加载入MATLAB仿真软件的工作环境中,输入命令对语音信号进行时域,频谱变换。 对该段合成的语音信号,分别用矩形窗、三角形窗、Hanning窗、Hamming窗及Blackman窗几种函数在MATLAB中设计滤波器对其进行滤波处理,滤波后用命令可以绘制出其频谱图,回放语音信号。对原始语音信号、合成的语音信号和经过滤波器处理的语音信号进行频谱的比较分析。 2.语音信号的时域频域分析 在Matlab软件平台下可以利用函数audioread对语音信号进行采样,得到了声音数据变量y,同时把y的采样频率Fs=44100Hz放进了MATALB的工作空间。

实验09-字符串

实验九字符串程序设计 班级:学号:姓名:评分: 一.【实验目的】 1、熟练掌握字符串的存取和操作方法方法。 2、进一步掌握C程序的调试方法和技巧。 二.【实验内容和步骤】 1、程序调试题 A.目标:进一步学习掌握程序调试的方法和技巧。 B.内容:参照《实验指导》教材P71“1.调试示例”,从键盘输入一个以回车键结束的字符串(少于80个字符),将它的内容逆向输出。例如:输入“ABCD”,输出“DCBA”。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试示例”文件夹中,文件名为error08_1.cpp) ①调试正确的源程序清单 #include int main( ) { int i, k, temp; char str[80]; printf("input a string: \n"); i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = '\0'; k = i - 1; for(i = 0; i < k; i++){ /* 调试时设置断点 */ temp = str[i]; str[i] = str[k]; str[k] = temp; k--; } /* 调试时设置断点 */ for(i = 0; str[i] != '\0'; i++) putchar(str[i]); printf("\n"); return 0; } ②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 2、完善程序,并调试运行程序 题目(1)求字符串长度。程序功能:连续输入一批以#结束的字符串(字符串的长度不超过80),遇## 则全部输入结束。统计并输出每个字符串的有效长度。例如:输入:hello 12#abc+0##,表示连续输入2个字符串"hello

《语音信号处理》实验报告材料

实用 中南大学 信息科学与工程学院 语音信号处理 实验报告 指导老师:覃爱娜 学生班级:信息0704 学生名称:阮光武 学生学好:0903070430 提交日期:2010年6月18日

实验一 语音波形文件的分析和读取 一、实验的任务、性质与目的 本实验是选修《语音信号处理》课的电子信息类专业学生的基础实验。通过实验: (1)掌握语音信号的基本特性理论:随机性,时变特性,短时平稳性,相关性等; (2)掌握语音信号的录入方式和*.WAV音波文件的存储结构; (3)使学生初步掌握语音信号处理的一般实验方法。 二、实验原理和步骤: WAV文件格式简介 WAV文件是多媒体中使用了声波文件的格式之一,它是以RIFF格式为标准。每个WAV文件的头四个字节就是“RIFF”。WAV文件由文件头和数据体两大部分组成,其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。常见的WAV声音文件有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指声音信号在“模拟→数字”转换过程中,单位时间内采样的次数;采样值是指每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为8位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。WAV文件数据块包含以脉冲编码调制(PCM)格式表示的样本。在单声道WAV文件中,道0代表左声道,声道1代表右声道;在多声道WAV文件中,样本是交替出现的。WAV文件的格式见表1。

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

实验5字符串的操作

博客网站设定了校验密码的规则,编写方法检验一个字符串是否是合法的密码。规则如下: 密码长度在8-16 之间 密码只能包含字母和数字 密码必须存在至少2 个数字如果用户输入的密码符合 2. import java.util.Scanner; 3. import java.util.regex.Pattern; 4. public class Check { 5. public static void main(String[] args) { 6. System.out.println("请输入密码:"); 7. Scanner sc = new Scanner(System.in); 8. String str = sc.next(); 9. Check ch = new Check(); 10. ch.checkup(str); 11. sc.close(); 12. } 13. 14. public void checkup(String str) { 15. String patternStr1 = "([0-9]|[a-zA-Z]){8,16}"; 16. String patternStr2 = ".*\\d.*\\d.*"; 17. boolean result1 = Pattern.matches(patternStr1, str); 18. boolean result2 = Pattern.matches(patternStr2, str); 19. if (result1 && result2) { 20. System.out.println(" valid password"); 21. } else { 22. System.out.println(" Invalid password "); 23. } 24. } 25. } 26. String patternStr2 = ".*\\d.*\\d.*"; 27. boolean result1 = Pattern.matches(patternStr1, str); 28. boolean result2 = Pattern.matches(patternStr2, str); 29. if (result1 && result2) { 30. System.out.println(" valid password"); 31. } else { 32. System.out.println(" Invalid password "); 33. } 34. } 35. } 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到Student 类中作为类的私有属性。创建一个Student 类型的对象数组,对学号进行升序排序并输出 /*从键盘输入多行文本,格式如下: 学生端名称,姓名,班级名称,学生ID,注册时间 姜涛,姜涛,,20092212232,2011-11-4 9:06:56

实验四 数组及其字符串的处理

实验四数组及其字符串的处理 1.输入一串英文字母,统计每个字母(不区分大小写)出现的次数。(输 出统计结果时一律显示为小写字母) 如输入:Good 则输出:字母d有1个 字母g有1个 字母o有2个 请根据提示填空,使程序实现相应功能。 #include main() { char ch[10000]; //用于保存输入的字母串 int nnum[26]=【1】;/* 赋初值,使各元素值为0 nnum用于存储各字母出现的次数, 因字母表共有26个字母,因此元素个数为26 */ int i,j; printf("请输入一串字母\n"); scanf("%s",【2】);//读取字符串 i=0;//变量i用于遍历整个字符串各元素,初值为0,表示从字符数组首元素开始 while(【3】) //依次读取各元素,直至遇到字符串结束符’\0’ { j=(ch[i]>=65&&ch[i]<=90)?ch[i]-65:ch[i]-97; /*若输入为字母,则用j 保存其在字母表中的位 次*/ if (【4】)nnum[j]++;//若j值不超限,则将该字母累计数加1 【5】;// 改变i值,换至下一个元素 } for(i=0;i<26;i++) if(nnum[i]!=0) printf("字母%c有%d个\n",97+i,【6】); //按题目要求输出结果 return; } 编程题 2.输入10个整数存入数组,找出其中的最大数及其位置。 (位置从0开始编号)

3.求裴波那契数列(1 1 2 3 5 8 13 21 34……)的前18项。 4.求字符串长度(实现strlen 函数的功能) 提示:可参考第1题。 5.输入一个5*5的矩阵(#define N 5),求 (1)所有元素的和 (2)主对角线元素之和 (3)最大值及最小值所在位置 #include main() { double mat[5][5]; int i,j; 【此处补充定义其它所需变量】 for(i=0;i<5;i++) for (j=0;j<5;j++) scanf("%lf",&mat[i][j]); 【完成其余代码,实现该题(1)(2)(3)的功能】 return; }

语音信号处理实验报告11

实验一 语音信号的时域分析 一、 实验目的、要求 (1)掌握语音信号采集的方法 (2)掌握一种语音信号基音周期提取方法 (3)掌握语音信号短时能量和短时过零率计算方法 (4)了解Matlab 的编程方法 二、 实验原理 语音是一时变的、非平稳的随机过程,但由于一段时间内(10-30ms)人的声带和声道形状的相对稳定性,可认为其特征是不变的,因而语音的短时谱具有相对稳定性。在语音分析中可以利用短时谱的这种平稳性,将语音信号分帧。 10~30ms 相对平稳,分析帧长一般为20ms 。 语音信号的分帧是通过可移动的有限长度窗口进行加权的方法来实现的。几种典型的窗函数有:矩形窗、汉明窗、哈宁窗、布莱克曼窗。 语音信号的能量分析是基于语音信号能量随时间有相当大的变化,特别是清音段的能量一般比浊音段的小得多。定义短时平均能量 [][]∑∑+-=∞-∞=-=-= n N n m m n m n w m x m n w m x E 122)()()()( 下图说明了短时能量序列的计算方法,其中窗口采用的是直角窗。 过零就是信号通过零值。对于连续语音信号,可以考察其时域波形通过时间轴的情况。而对于离散时间信号,如果相邻的取样值改变符号则称为过零。由此可以计算过零数,过零数就是样本改变符号的次数。单位时间内的过零数称为平

均过零数。 语音信号x (n )的短时平均过零数定义为 ()[]()[]()()[]()[]() n w n x n x m n w m x m x Z m n *--=---= ∑∞ -∞=1sgn sgn 1sgn sgn 式中,[]?sgn 是符号函数,即 ()[]()()()()???<-≥=01 01sgn n x n x n x 短时平均过零数可应用于语音信号分析中。发浊音时,尽管声道有若干个共振峰,但由于声门波引起了谱的高频跌落,所以其语音能量约集中干3kHz 以下。而发清音时.多数能量出现在较高频率上。既然高频率意味着高的平均过零数,低频率意味着低的平均过零数,那么可以认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数。然而这种高低仅是相对而言,没有精确的数值关系。 短时平均过零的作用 1.区分清/浊音: 浊音平均过零率低,集中在低频端; 清音平均过零率高,集中在高频端。 2.从背景噪声中找出是否有语音,以及语音的起点。 基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。 由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的

操作系统原理实验十一

实验十一银行家算法模拟实现 1实验类型 设计型(4学时)。 2实验目的 1)理解死锁避免相关内容; 2)掌握银行家算法主要流程; 3)掌握安全性检查流程。 3实验描述 本实验主要对操作系统中的死锁预防部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 4实验内容 1)设计多个资源(≥3); 2)设计多个进程(≥3); 3)设计银行家算法相关的数据结构; 4)动态进行资源申请、分配、安全性检测并给出分配结果。 5实验要求 1)编写程序完成实验内容; 2)画出安全性检测函数流程图; 3)小组派1人上台用PPT演讲实现过程; 4)撰写实验报告。

6测试要求 1)进行Request请求,输入参数为进程号、资源号和资源数; 2)进行3次以上的Request请求; 3)至少进行1次资源数目少于可用资源数,但不安全的请求。 7相关知识 7.1银行家算法的数据结构 1)可利用资源向量Available。其中每个元素代表每类资源的数目。 2)最大需求矩阵Max。其中每个元素代表每个进程对于每类资源的最大需求量。 Max[i,j]=K表示i进程对于j类资源的最大需求量为K。 3)分配矩阵Allocation。其中每个元素代表每个进程已得到的每类资源的数目。 4)需求矩阵Need。其中每个元素代表每个进程还需要的每类资源的数目。 7.2银行家算法 Request i [j]=K表示进程Pi需要K个j类资源。 1)如果Request i [j]≤Need[i , j],便转向步骤2,否则认为出错。 2)如果Request i [j]≤Available[j],便转向步骤3,否则表示无足够资源,Pi需等待; 3)系统尝试分配资源给Pi; 4)系统进行安全性检查,检查此次资源分配后,系统是否安全。如果安全,则正式分配资源,否则撤销此次分配。 7.3安全性算法 1)设置两个向量:工作向量Work和Finish。算法开始时Work=Available;Finish 表示系统是否有足够的资源分配给进程,使之运行完成,开始时,令 Finish[i]=False;如果有足够的资源分配给进程,则令Finish[i]=True。 2)从进程集合中找到一个能满足下列条件的进程:Finish[i]=False;Need[i,j] ≤Work[j],若找到,执行步骤3),否则,执行步骤4); 3)Pi获得所需资源后,可顺利执行指导完成,并释放它占有的资源。并执行:Work[j]=Work[j]+Allocation[i , j]; Finish[i] = True; 到第2)步。

实验六字符及字符串处理

实验六字符及字符串处理 一、实验目的 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.改错题 以下程序对一个由字母和数字字符组成的字符串从头至尾作如下变换:

语音信号处理实验报告实验一

通信工程学院12级1班罗恒2012101032 实验一语音信号的低通滤波和短时分析综合实验 一、实验要求 1、根据已有语音信号,设计一个低通滤波器,带宽为采样频率的四分之一,求输出信号; 2、辨别原始语音信号与滤波器输出信号有何区别,说明原因; 3、改变滤波器带宽,重复滤波实验,辨别语音信号的变化,说明原因; 4、利用矩形窗和汉明窗对语音信号进行短时傅立叶分析,绘制语谱图并估计基音周期,分析两种窗函数对基音估计的影响; 5、改变窗口长度,重复上一步,说明窗口长度对基音估计的影响。 二、实验目的 1.在理论学习的基础上,进一步地理解和掌握语音信号低通滤波的意义,低通滤波分析的基本方法。 2.进一步理解和掌握语音信号不同的窗函数傅里叶变化对基音估计的影响。 三、实验设备 1.PC机; 2.MATLAB软件环境; 四、实验内容 1.上机前用Matlab语言完成程序编写工作。 2.程序应具有加窗(分帧)、绘制曲线等功能。 3.上机实验时先调试程序,通过后进行信号处理。 4.对录入的语音数据进行处理,并显示运行结果。 5. 改变滤波带宽,辨别与原始信号的区别。 6.依据曲线对该语音段进行所需要的分析,并且作出结论。 7.改变窗的宽度(帧长),重复上面的分析内容。 五、实验原理及方法 利用双线性变换设计IIR滤波器(巴特沃斯数字低通滤波器的设计),首先要设计出满足指标要求的模拟滤波器的传递函数Ha(s),然后由Ha(s)通过双线性变换可得所要设计的IIR滤波器的系统函数H(z)。如果给定的指标为数字滤波器的指标,则首先要转换成模拟滤波器的技术指标,这里主要是边界频率Wp和Ws 的转换,对ap和as指标不作变化。边界频率的转换关系为∩=2/T tan(w/2)。接着,按照模拟低通滤波器的技术指标根据相应设计公式求出滤波器的阶数N和3dB截止频率∩c ;根据阶数N查巴特沃斯归一化低通滤波器参数表,得到归一化传输函数Ha(p);最后,将p=s/ ∩c 代入Ha(p)去归一,得到实际的模拟滤波器传输函数Ha(s)。之后,通过双线性变换法转换公式s=2/T((1-1/z)/(1+1/z))得到所要设计的IIR滤波器的系统函数H(z)。

字符串处理实验报告

字符串处理实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: 使学生能够掌握PHP中常用字符串函数的使用方法 实验内容: 编写PHP页面,实现字符串翻转功能、中文字符串截取、字符串对比、HTML 字符串过滤等功能 实验步骤与调试过程: 第一步、 php服务器安装并成功后就可以开始php编程之旅单击任务栏中的系统托盘中wampserver图标, 弹出界面用于管理服务器调试一下,然后打开start all services 选项,时启动服务器 在C:\wamp\www下建立项目sez(十二周首字母),并在该目录下新建一个文本文档,然后将该文件名称从新建文本文档.txt修改为test1.php 第二步、在sez项目中建立文件test2.php,此页面主要用来实现中文字符串截取功能,代码如下所示。 在sez项目中建立文件test3.php,此页面主要用来实现字符串对比功能,代码如下所示。 在sez项目中建立文件test4.php,此页面主要用来实现HTML字符串过滤功能,代码如下所示。 第三步、以记事本方式打开test1.php文件输入代码 第四步、保存test1.php文件内容后,启动php服务器 第五步、打开IE浏览器,在地址栏中输入http://localhost/1/helloworld.php后按回车键 看到想要看到页面则这个php程序编写运行成功 第六步、为保证php程序文件的扩展名确实为php不能隐藏已知文件类型的扩展名单击工具 文件夹选项,弹出文件夹选项对话框 第七步、在文件夹选项对话框中选择查看选项卡取消那个复选框,然后单击确定按钮即可

实验六 字符串处理及基础类库

实验六字符串处理及基础类库 一、实验目的 1、理解并掌握String类、StringBuffer类; 2、理解并掌握StringTokenizer类 3、掌握字符串与其他数据类型的转换 4、掌握Math类的使用。 5、了解和掌握集合框架类。 6、掌握Java Application命令行参数的使用 二、实验内容与要求 1.,理解String类的使用 利用下面的关键代码编写一个完整的程序 String s=new String("This is an demo of the String method."); //String s="This is an demo of the String method."; System.out.println("Length: "+s.length()); System.out.println("SubString: "+s.substring(11,15)); public class theString { public static void main(String[] args){ String s=new String("This is an demo of the String method."); //String s="This is an demo of the String method."; System.out.println("Length: "+s.length()); System.out.println("SubString(int):"+s.substring(11)); System.out.println("SubString(int, int): "+s.substring(11,15)); } } 2.理解StringBuffer类的使用 利用下面的关键代码编写一个完整的程序 StringBuffer sb=new StringBuffer("Hello World!"); sb.append(" Hello Java!"); sb.insert(12," And"); System.out.println(sb); System.out.println(sb.charAt(0)); sb.setCharAt(0,''h''); System.out.println(sb.charAt(0)); System.out.println(sb);

相关文档
最新文档