1.实现字符串逆置
例如:char a[]=”hello my student”
输出:student my hello
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[]="hello my student";
int i=0,k;
char temp,t;
int j=strlen(a)-1;
while(i<j)
{
t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
i=0,j=0;
while(a[i]!='\0')
{
while(a[j]!=' '&&a[j]!='\0')
{
j++;
}
k=j-1;
while(i<k)
{
temp=a[i];a[i]=a[k];a[k]=temp;
i++;k--;
}
while(a[j]==' ')
{
j++;
}
i=j;
}
puts(a);
return 0;
}
2.使用非函数方法实现字符串比较
#include<stdio.h>
int main(int argc, const char *argv[])
{
char a[]="xjx",b[]="xjj";
int i=0,j=0;
int cha;
while(a[i]==b[j])
{
if(a[i]=='\0'&&b[j]=='\0')
{
cha=a[i]-b[j];
break;
}
else
{
i++;j++;
}
}
cha =a[i]-b[j];
if(cha==0)
printf("a=b\n");
else if(cha>0)
printf("a>b\n");
else
printf("a<b\n");
return 0;
}
3.使用非函数方法实现字符串连接
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[20]="xjx";
char b[20]="smallxu";
int i=strlen(a);
for(int j=0;b[j]!='\0';j++)
{
a[i++]=b[j];
}
a[i]='\0';
printf("a=%s\n",a);
return 0;
}
4.打印m行n列的杨辉三角
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a[100][100];
int i,j,n;
printf("请输入需要打印的行数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf(" ");
}
for(j=0;j<=i;j++)
{
if(j==0||i==j)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
5.上课学习例题
5.1二维数组存储班级5个人的姓名(冒泡)
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[5][50];
char t[50]="";
int i,j;
for(i=0;i<5;i++)
{
printf("请输入姓名:");
scanf("%s",a[i]);
}
int count=0;
for(i=1;i<5;i++)
{
count=0;
for(j=0;j<5-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
count++;
}
}
if(count==0)
break;
}
for(i=0;i<5;i++)
printf("%s\n",a[i]);
return 0;
}
5.2计算二维字符数组的最大字符串 strcmp
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[3][10]={"gibdu","rthbici","ojfssk"};
int i;
char max[20]="";
for(i=0;i<3;i++)
{
if(i==0)
strcpy(max,a[i]);
if(strcmp(max,a[i])<0)//if(max<a[i])
{
strcpy(max,a[i]);
}
}
printf("最大值是:%s\n",max);
return 0;
}
5.3计算二维字符数组的最长字符串strlen
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[3][10]={"dfghjkol","iuhg","poijhgf"};
int i;
char max[20]="";
for(i=0;i<3;i++)
{
if(i==0)
strcpy(max,a[i]);
if(strlen(max)<strlen(a[i]))
{
strcpy(max,a[i]);
}
}
printf("最长值是:%s 长度是:%ld\n",max,strlen(max));
return 0;
}
5.4将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[3][5]={"wafda","sddsc","sdafs"};
char b[20]="";
int i,j,k=0;
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
if(a[j][i]!='\0')
b[k++]=a[j][i];
}
}
printf("%s\n",b);
return 0;
}
5.5输入一个字符串key,查找key是否在二维数组中出现
若没有输出不存在
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[5][5]={"ccsd","juuw","aaja","gjkd","eghi"};
char key[]="afia";
int count=0;
for(int i=0;i<5;i++)
{
if(strcmp(a[i],key)==0)
{
count++;
}
}
if(count==0)
{
printf("不存在\n");
}
return 0;
}
出现一次输出出现的下标
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[5][5]={"ccsd","juuw","aaja","gjkd","eghi"};
char key[]="aaja";
int count=0,xb1;
for(int i=0;i<5;i++)
{
if(strcmp(a[i],key)==0)
{
count++;
if(count==1)
xb1=i;
}
}
if(count==0)
{
printf("不存在\n");
}
else if(count==1)
{
printf("出现的下标为%d\n",xb1);
}
return 0;
}
出现多次,输出第一次的出现的下标,和最后一次的下标
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[5][5]={"aaja","juuw","aaja","gjkd","aaja"};
char key[]="aaja";
int count=0,xb1,xb2;
for(int i=0;i<5;i++)
{
if(strcmp(a[i],key)==0)
{
count++;
if(count==1)
xb1=i;
xb2=i;
}
}
if(count==0)
{
printf("不存在\n");
}
else if(count==1)
{
printf("出现的下标为%d\n",xb1);
}
else{
printf("第一次出现的下标为:%d\n最后一次出现的下标为:%d\n",xb1,xb2);
}
return 0;
}
5.6对二维字符数组每个字符串实现简单选择排序
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char a[5][5]={"ccsd","juuw","aaja","gjkd","eghi"};
int i,j,mini;
char t[5]="";
for(i=0;i<5-1;i++)
{
mini=i;
for(j=i+1;j<5;j++)
{
if(strcmp(a[mini],a[j])>0)
{
mini=j;
}
}
if(mini!=i)
{
strcpy(t,a[mini]);
strcpy(a[mini],a[i]);
strcpy(a[i],t);
}
}
for(i=0;i<5;i++)
{
printf("%s\t",a[i]);
}
return 0;
}