char[ ] subStr=new char[8] 在内存中开辟一个空间储存了八个字符的数组对象String 分两种String str = "hello" 是将hello放在字符串池中而String str = new String("hello") 是在内存中开一个空间储存了一个字符串对象至于你问的跟字符串的区别:这个可以没什么太大的联系,各自的方法跟属性都不一样,虽然可以相互转化,但是在JAVA中都是属于同一个东西,都可以看做对象。一个苹果切8分 跟另外一个苹果,那8分是一个整体,而另一个是一个整体,那8分可以是别的比如香蕉什么的。性质不同的两种类型。
是定义一个初始长度为8的字符数组,是指单个字符,要用' '来初始化,比如'a','b',如果写成'ab'就会出错String定义的是字符串,要用" "来初始化,比如"abd",而且可以使用toCharArray()方法来把字符串转换成字符数组。
/** 按照你给的截图修正了下,看看是不是你要的 */#include<iostream>#include<cstdio>using namespace std;const int MAXSTRLENGTH=99999;//字符串最大长度/****************字符串处理函数的声明**************/int mystrlen(char* s1);void mystrcpy(char* s2,char* s1);void mystrcat(char* s1,char* s2);void mystrcut(char* s1,char* strsub,int m,int len);void mysort(char* s1);/**********************main函数*********************/void main(void){ char* s1=new char[MAXSTRLENGTH]; char* substr=new char[0]; substr[0]='\0'; int flg=-1; cout<<"input s1:"<<endl; gets(s1); char* s2=new char[mystrlen(s1)+1]; s2[0]='\0'; while(flg!=0) { cout<<"你想对字符串s1做什么操作: input:"<<endl; cout<<"0:exit(退出)\t\t"<<"1:copy(复制到s2中)\t\t"<<"2:cat s2(连接s2)"<<endl <<"3:length(获取长度)\t"<<"4:cut(截取)\t\t\t"<<"5:sort(排序)"<<endl; cin>>flg; switch(flg) { case 0:exit(0);//退出 case 1: mystrcpy(s2,s1); cout<<"复制到s2的字符串为:"<<s2<<endl; break; case 2: mystrcat(s1,s2); cout<<"连接后的字符串为:"<<s1<<endl; break; case 3: cout<<"得到字符串s1的长度为:"<<mystrlen(s1)<<endl; break; case 4: cout<<"输入要截取的字符串s1的位置和长度: :"<<endl; int m,len; cin>>m>>len; mystrcut(s1,substr,m,len); cout<<"截取串s1下标为"<<m<<"开始的"<<len<<"个字符构成的字符串为:"<<substr<<endl; break; case 5: mysort(s1); cout<<"排序后字符串s1为:"<<s1<<endl; break; default:cerr<<"选择有误,请重新选择!"<<endl; } cout<<"\n*******************************************************"<<endl; }}/*************字符串处理的函数实现******************/int mystrlen(char* s1)//字符串长度{ int i=0; while(true) { if(s1[i]=='\0') i++; } return i;}void mystrcpy(char* s2,char* s1)//字符串拷贝{ unsigned int i=0; unsigned int len=mystrlen(s1); for(;i<len;i++) { s2[i]=s1[i]; } s2[i]='\0';}void mystrcat(char* s1,char* s2)//字符串连接{ int l1=mystrlen(s1); int l2=mystrlen(s2); int i=0; for(;i<l2;i++,l1++)//此处字符串的长度尽然会自动增加,而无需用new非配内存!? { s1[l1]=s2[i]; } s1[l1]='\0';}void mystrcut(char* s1,char* strsub,int m,int len)//字符串截取{ if( (m+len) > mystrlen(s1) ) { cerr<<"Index or length is bad"<<endl; return; } int j=0; for(int i=m;i<(m+len);i++,j++) { strsub[j]=s1[i]; } strsub[len]='\0';}void mysort(char* s1)//字符串排序{ int n=mystrlen(s1); char tmp; for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(s1[i]>s1[j]) { tmp=s1[i]; s1[i]=s1[j]; s1[j]=tmp; } } }}