一、思维导图
1、字符串函数
2、二维字符数组
二、作业
1、实现字符串逆置
例如:char a[]=”hello my student”
输出:student my hello
#include <stdio.h>#include <string.h>intmain(int argc, constchar *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--;
}
puts(a); //输出查看整体逆置效果
printf("\n");
//单个单词逆置
i=0;j=0;
while(a[i]!='\0')
{
//确定单词的结束符号“空格”或者字符串结束符“\0” j的位置
while(a[j]!=' '&&a[j]!='\0')
{
j++; //j代表‘ ’或者‘\0’
}
k=j-1; //k代表单词的最后一个字母
//实现单词的交换
while(i<k) //当i小于k时,实现单词交换
{
temp=a[i];a[i]=a[k];a[k]=temp;
i++;k--;
}
//把j移动到下一个单词的第一个字母下标
while(a[j]==' ')
{
j++;
}
i=j;
}
puts(a);
return0;
}
2、使用非函数方法实现字符串比较
#include <stdio.h>intmain(int argc, constchar *argv[])
{
//使用非函数方法实现字符串比较
char a[10]="",b[10]="";
printf("请输入两个字符串:");
scanf("%s%s",a,b);
//char a[10]="asdtia",b[10]="asbb";
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<0\n");
return0;
}
3、使用非函数方法实现字符串连接
#include <stdio.h>#include <string.h>intmain(int argc, constchar *argv[])
{
//使用非函数链接两个字符串
char a[30]="",b[30]="";
printf("请输入两个字符串:");
scanf("%s%s",a,b);
int i=strlen(a);
for(int j=0;b[j]!='\0';j++)
{
a[i++]=b[j];
}
a[i]='\0';
puts(a);
return0;
}
4、打印m行n列的杨辉三角
#include <stdio.h>intmain(int argc, constchar *argv[])
{
//打印m行n列的杨辉三角
int a[20][20]={0};
int i,j,m,n;
printf("请输入杨辉三角的行数和列数:");
scanf("%d%d",&m,&n);
for(i=0;i<m;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");
}
return0;
}
三、今日课程练习代码
1、利用strcmp对字符串比较
1.1定义3个字符串,计算最大值[两个参数都为变量]
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//定义3个字符串,计算最大值[两个参数都为变量]
char a[]="asd";
char b[]="baad";
char c[]="sgw";
if(strcmp(a,b)>0&&strcmp(a,c)>0)
printf("最大值为%s\n",a);
if(strcmp(b,a)>0&&strcmp(b,c)>0)
printf("最大值为%s\n",b);
if(strcmp(c,a)>0&&strcmp(c,b)>0)
printf("最大值为%s\n",c);
return 0;
}
1.2输入一个字符串,[和常量进行比较]
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//输入一个字符串,[和常量进行比较]
char a[50]="";
int i=0;
printf("请输入一个字符串:");
scanf("%s",a);
if(strcmp(a,"ilovechina")==0)
printf("你是一个爱国的中国人\n");
else if(strcmp(a,"ilikechina")==0)
printf("你是一个优秀的中国人\n");
else if(strcmp(a,"ihatechina")==0)
printf("你是一个不友好的中国人\n");
esle
printf("无效字符\n");
return 0;
}
2、利用strcpy实现两个字符串交换
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//实现两个字符串交换
char a[20]="asdv",b[20]="fairjw",t[10]="";
strcpy(t,a);strcpy(a,b);strcpy(b,t);
printf("%s\n%s\n",a,b) ;
return 0;
}
3、利用二维数组存储班级5个人的姓名(冒泡排序)
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//利用二维数组存储班级5个人的姓名(冒泡排序)
int i,j,count;
char a[5][10],t[50]="";
for(i=0;i<5;i++)
{
printf("请输%d个人的名字:",i);
scanf("%s",a[i]);
}
for(i=1;i<5;i++) //循环轮数
{
count=0; //计算每一轮比较的次数,每一轮的次数清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)//每一轮比较的次数为0,该顺序已经有序
break;
}
for(i=0;i<5;i++)
printf("%s\n",a[i]);
return 0;
}
4、计算二维字符数组的最大字符串
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//计算二维字符数组的最大字符串
int i,j;
char a[2][3],max[20]="";
for(i=0;i<5;i++)
{
scanf("%s",a[i]);
}
for(i=0;i<5;i++)
{
if(i==0)
strcpy(max,a[i]);
for(j=0;j<5-i;i++)
{
if(strcmp(max,a[i])<0)
strcpy(max,a[i]);
}
}
printf("最大值是:%s\n",max);
return 0;
}
5、计算二维字符数组的最长字符串
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//计算二维字符数组的最长字符串
char a[3][20]={"dfsagdhf","rwtey","rtyu"};
int i;
char max[20]=""; //解决乱码
for(i=0;i<3;i++)
{
if(i==0) //第一次循环
strcpy(max,a[i]);
if(strlen(max)<strlen(a[i]))//if(max<a[i])
{
strcpy(max,a[i]);
}
}
printf("最长值是:%s 长度是:%ld\n",max,strlen(max));
return 0;
}
6、将3行5列的二维数组中的字符数据,按列的顺序依次放到一个字符串中
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
//将3行5列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
char a[3][5]={"asdf","wert","tyui"};
char b[50]="";
int i,j,k=0;
for(j=0;j<5;j++)
{
for(i=0;i<3;i++)
{
if(a[i][j]!='\0')
b[k++]=a[i][j];
}
}
puts(b);
return 0;
}