数据结构实验四 串操作

更新时间:2023-03-15 22:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验报告四 串操作

班级: 姓名: 学号: 专业:

一、 实验目的:

(1) 掌握串的定义、术语。 (2) 掌握串的基本操作算法。 (3) 掌握串的匹配算法。 二、 实验内容:

1. 在常量串MyString类中,增加以下方法,并求各算法的时间复杂度。 public MyString trim() //删除串中所有空格 public char[] toCharArray() //返回字符数组

public MyString toLowerCase() //返回将大写字母转换成小写字母的字符串 public MyString toUpperCase() //返回将小写字母转换成大写字母的字符串

public MyString replace(char old, char newc) //用字符newc替换串中的字符old public Boolean equals(Object obj) //判断两个串是否相等

public Boolean equalsIgnoreCase(String1 str) //判断两个串是否相等,忽略大小写 public int compareTo(MyString str) //比较两个串大小,实现Comparable接口 public int compareToIgnoreCase(MyString str) //比较两个串大小,忽略大小写 public Boolean startsWith(MyString prefix) //判断prefix是否前缀子串 public Boolean endsWith(MyString suffix) //判断suffix是否前缀子串 源代码:

package Word1;

public class MyString {

char[] str;

public MyString trim() //删除串中所有空格 { }

public char[] toCharArray() { }

public MyString toLowerCase() //返回将大写字母转换成小写字母的字符串 {

for(int i=0;i

if(str[i]>=65 && str[i]<=90 ){

str[i]=(char) (str[i]+32);

return str;

//返回字符数组

char[] n=new char[str.length]; int cou=0;

for(int i=0;i

if(str[i]!=' '){ }

n[cou]=str[i]; cou++;

}

}

}

return this;

public MyString toUpperCase() //返回将小写字母转换成大写字母的字符串 { }

public MyString replace(char old, char newc) //用字符newc替换串中的字符{ }

public boolean equals(Object obj) //判断两个串是否相等 { }

public boolean equalsIgnoreCase(String str1)//判断两个串是否相等,忽略大小写 {

char[] c=new char[str1.length()];

if(obj instanceof String){ }

return true;

String s=obj.toString(); char[] c=new char[s.length()]; for(int i=0;i

c[i]=s.charAt(i); return false;

for(int i=0;i

if(c[i]!=str[i])

return false;

if(c.length!=str.length) else{

for(int i=0;i

return this;

if(str[i]==old)

str[i]=newc;

for(int i=0;i

return this;

if(str[i]>=97 && str[i]<=122 ){ }

str[i]=(char) (str[i]-32);

old

}

for(int i=0;i

return true;

c[i]=str1.charAt(i); return false;

for(int i=0;i

if(str[i]>=65 && str[i]<=90 ){ } else{ }

if(c[i]!=str[i] && c[i]!=str[i]-32)

return false;

if(c[i]!=str[i] && c[i]!=str[i]+32)

return false;

if(c.length!=str.length) else{

public int compareTo(MyString str) //比较两个串大小,实现Comparable接口 {

int c;

if(this.str.length==str.str.length) } else{

c=this.str.length; for(int i=0;i

if(this.str[i]==str.str[i])

continue;

if(this.str[i]>str.str[i]) c=str.str.length; c=str.str.length; for(int i=0;i

return 0;

if(this.str[i]==str.str[i]) }

continue; return 0; return 1;

if(this.str[i]>str.str[i]) else{

if(this.str.length>str.str.length){

}

}

}

}

return 0; return 1;

else{

return 1;

public int compareToIgnoreCase(MyString str) //比较两个串大小,忽略大小写 { }

int c;

char[] c1=new char[this.str.length]; char[] c2=new char[str.str.length]; c1=this.toUpperCase().str; c2=str.toUpperCase().str;

if(this.str.length==str.str.length) } else{ }

return 1;

c=this.str.length; for(int i=0;i

if(c1[i]==c2[i]) }

continue; return 0; return 1; if(c1[i]>c2[i]) else{

c=str.str.length; c=str.str.length; for(int i=0;i

return 0;

if(c1[i]==c2[i]) }

continue; return 0; return 1; if(c1[i]>c2[i]) else{

if(this.str.length>str.str.length){

}

public boolean startsWith(MyString prefix) //判断prefix是否前缀子串 { }

public boolean endsWith(MyString suffix) //判断suffix是否前缀子串 { }

char[] c=new char[suffix.str.length];

for(int i=this.str.length,j=c.length;j>=0;i--,j--){ }

return true;

if(c[j]==this.str[i])

continue; return false; else

char[] c=new char[prefix.str.length]; for(int i=0;i

return true;

if(c[i]==this.str[i])

continue; return false; else

2. 统计在一个串中各字符的出现次数。

源代码:package Word1;

public class MyString {

char[] str;

public MyString trim() //删除串中所有空格 {

char[] n=new char[str.length]; int cou=0;

for(int i=0;i

if(str[i]!=' '){ }

n[cou]=str[i]; cou++;

}

public char[] toCharArray() { }

public MyString toLowerCase() //返回将大写字母转换成小写字母的字符串 { }

public MyString toUpperCase() //返回将小写字母转换成大写字母的字符串 { }

public MyString replace(char old, char newc) //用字符newc替换串中的字符{ }

public boolean equals(Object obj) //判断两个串是否相等 {

if(obj instanceof String){

String s=obj.toString(); char[] c=new char[s.length()]; for(int i=0;i

c[i]=s.charAt(i); return false; if(c.length!=str.length) else{

for(int i=0;i

return this;

if(str[i]==old)

str[i]=newc;

for(int i=0;i

return this;

if(str[i]>=97 && str[i]<=122 ){ }

str[i]=(char) (str[i]-32);

for(int i=0;i

return this;

if(str[i]>=65 && str[i]<=90 ){ }

str[i]=(char) (str[i]+32);

return str;

//返回字符数组

old

}

}

}

for(int i=0;i

if(c[i]!=str[i])

return false;

return true;

public boolean equalsIgnoreCase(String str1)//判断两个串是否相等,忽略大小写 { }

public int compareTo(MyString str) //比较两个串大小,实现Comparable接口 {

int c;

if(this.str.length==str.str.length)

c=str.str.length; c=str.str.length; for(int i=0;i

if(this.str[i]==str.str[i])

continue; return 0; return 1;

if(this.str[i]>str.str[i]) else{

if(this.str.length>str.str.length){ char[] c=new char[str1.length()]; for(int i=0;i

return true;

c[i]=str1.charAt(i); return false;

for(int i=0;i

if(str[i]>=65 && str[i]<=90 ){ } else{ }

if(c[i]!=str[i] && c[i]!=str[i]-32)

return false;

if(c[i]!=str[i] && c[i]!=str[i]+32)

return false;

if(c.length!=str.length) else{

}

}

return 0;

}

else{ c=this.str.length; for(int i=0;istr.str[i]) return 0; else{

return 1;

}

}

}

return 1;

}

public int compareToIgnoreCase(MyString str) { int c;

char[] c1=new char[this.str.length]; char[] c2=new char[str.str.length]; c1=this.toUpperCase().str; c2=str.toUpperCase().str;

if(this.str.length==str.str.length) c=str.str.length; if(this.str.length>str.str.length){

c=str.str.length; for(int i=0;ic2[i]) return 0; else{

return 1; }

}

return 0;

} else{ c=this.str.length; for(int i=0;i

if(c1[i]==c2[i]) //比较两个串大小,忽略大小写

}

}

}

}

}

continue; return 0; return 1;

if(c1[i]>c2[i]) else{

return 1;

public boolean startsWith(MyString prefix) //判断prefix是否前缀子串 { }

public boolean endsWith(MyString suffix) //判断suffix是否前缀子串 { }

char[] c=new char[suffix.str.length];

for(int i=this.str.length,j=c.length;j>=0;i--,j--){ }

return true;

if(c[j]==this.str[i])

continue; return false; else

char[] c=new char[prefix.str.length]; for(int i=0;i

return true;

if(c[i]==this.str[i])

continue; return false; else

测试实例: str1=“Good morning!” str2=“Shanghai 2010” 粘贴测试结果:

3. 找出两个字符串中所有共同的字符。

源代码:package Word1;

public class Find { }

static String str1=\; static String str2=\;

public static void main(String args[]){ }

public static char[] fin(String s1,String s2){ }

char c=0;

char[] c1=new char[26]; int z=0;

for(int i=0;i

return c1;

c=s1.charAt(i);

if(s1.indexOf(c,i+1)==-1){ } else

continue;

for(int j=0;j

if(c==s2.charAt(j)){ }

c1[z]=c; z++; break;

char[] c=new char[26]; c=fin(str1,str2);

for(int i=0;c[i]!=0;i++){ }

System.out.printf(\,c[i]);

粘贴测试结果:

4. 判断一个字符串是否为一个E-mail地址。 源代码:package Word1;

public class Email {

static String str=\; public static void main(String[] args){ }

public static boolean First(){ }

public static boolean ReAndEnd(){

for(int i=0;i

if(str.charAt(i)=='@'){

if(str.indexOf('@',i+1)!=-1)

return false; return false; if(i==str.length()-1)

if(str.charAt(i+1)=='.' || str.charAt(i-1)=='.')

if(str.charAt(0)=='@')

return false; return true; if(First()) }

if(ReAndEnd()) }

System.out.println(\该字符串不是合法邮箱地址\);

if(Name()) }

System.out.println(\该字符串不是合法邮箱地址\);

System.out.println(\该字符串为合法邮箱地址\); System.out.println(\该字符串不是合法邮箱地址\); else{

else{

else{

}

}

}

}

return false;

if(str.charAt(str.length()-1)=='.')

return false; return true;

public static boolean Name(){ }

for(int i=0;i

return true;

if(str.charAt(i)>=0 && str.charAt(i)<=47)

return false; return false; return false; return false;

if(str.charAt(i)>=58 && str.charAt(i)<=64) if(str.charAt(i)>=91 && str.charAt(i)<=96) if(str.charAt(i)>=123)

粘贴测试结果:

三、 心得体会:(含上机中所遇问题的解决办法,所使用到的编程技巧、创新点及编程

的心得)

本文来源:https://www.bwwdw.com/article/gw6v.html

Top