第一题:string内的函数改写:
ps:不会指针,直接写了四个无参函数将就一下了
#include <stdio.h>
//判断字符串有效字符个数strlen
void strlen(){
printf("请输入一串字符\n");
char c [2000] = "";
gets(c);
int i=0;
while(c[i]!='\0')
i++;
printf("输入字符串有效长度为:%d\n",i);
}
//拷贝字符串strcpy
void strcpy(){
char c0 [2000] = "";
char c1 [2000] = "";
printf("请输入一串字符(拷贝前)\n");
gets(c0);
//拷贝前字符串(空字符下标)的实际长度
int num=0;
while(c0[num]!='\0')
num++;
printf("请输入一串字符,该字符串将会被拷贝到上一字符串中\n");
gets(c1);
int j=0;
for(;c1[j]!='\0';j++)
c0[j] = c1[j];
c0[j]='\0';
printf("拷贝后的字符串为:%s\n",c0);
printf("该数组实际存储内容为:");
for(int i=0;i<num;i++)
printf("%c",c0[i]);
putchar(10);
}
//比较字符串strcmp
void strcmp(){
char c0 [2000] = "";
char c1 [2000] = "";
printf("请输入一串字符(字符串1)\n");
gets(c0);
printf("请输入一串字符(字符串2)\n");
gets(c1);
//num为strcmp返回值
int num = 0,i = 0;
for(;c0[i]!=0&&c1[i]!=0;i++){
if(c0[i]==c1[i])
continue;
if(c0[i]>c1[i]){
num=1;
break;
}else{
num=-1;
break;
}
}
if(c0[i]==0||c1[i]==0){
if(c0[i]==c1[i])
num=0;
if(c0[i]>c1[i]){
num=1;
}else{
num=-1;
}
}
switch(num){
case 1:
{printf("字符串1大于字符串2\n");break;}
case 0:
{printf("字符串1等于字符串2\n");break;}
case -1:
{printf("字符串1小于字符串2\n");break;}
}
}
//拼接字符串strcat
void strcat(){
char c0 [2000] = "";
char c1 [2000] = "";
printf("请输入一串字符(字符串1)\n");
gets(c0);
printf("请输入一串字符(字符串2)\n");
gets(c1);
int i=0,j=0;
for(;c0[i]!='\0';i++ );
for(;c1[j]!='\0';j++);
printf("将字符串2连接到字符串1后面\n");
if(j<sizeof(c0)/sizeof(c0[0])-i)
for(int a=0;a<j;a++)
c0[i++]=c1[a];
else
printf("字符串1容量不够!\n");
c0[i]='\0';
printf("组成新字符串为%s\n",c0);
}
int main(int argc, const char *argv[])
{
int a=0,b=0;
while(b!=1){
printf("请选择你想执行的操作:\n0.退出\n1.计算长度\n2.复制\n3.比较\n4.连接\n");
scanf("%d",&a);
getchar();
switch(a){
case 0:{
b=1;break;
}
case 1:{
strlen();break;
}
case 2:{
strcpy();break;
}
case 3:{
strcmp();break;
}
case 4:{
strcat();break;
}
}
}
return 0;
}
结果:
其中,需拷贝的字符串(字符串2)有效长度小于原字符串(字符串1),字符串2会覆盖掉字符串1前面,等于字符串2有效长度个元素,超出字符串2有效长度的元素无法覆盖。如上图字符串1实际存储abcd67,其中第五个元素为空字符,故不显示
strcmp打印差值
第二题:删除字符串中的空格(遇到空格将空格后所有元素前移重新判断,直到不为空格)
也可以用辅助数组······
第三题:字符串的翻转,头尾互相交换