1.课堂练习
1.1 非函数实现strlen
代码如下:
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char str[]={"hello"};
int i;
for(i=0;str[i]!=0;i++);//循环到'\0'结束,i的值为字符串长度
printf("i=%d\n",i);
return 0;
}
结果如下:
1.2 非函数实现strcpy
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char dest[10]="hello";//定义目标函数
char src[]="123";
int i;
for(i=0;src[i]!='\0';i++)//将src各位的值赋值各dest,循环到'\0'为止
{
dest[i]=src[i];
}
dest[i]='\0';将'\0'赋值给dest的最后一位
puts(dest);
return 0;
}
结果如下:
1.3 非函数实现strcat
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char dest[20]="hello";
char src[]="123";
int i,j;
for(i=0;dest[i]!='\0';i++);//计算dset字符串长度,i=5
for(j=0;src[j]!='\0';j++)//将dest后几位替换为src对应的字符
{
dest[i+j]=src[j];
}
dest[i+j]='\0';//将'\0'赋值给dest最后一位
puts(dest);
return 0;
}
结果如下:
1.4 非函数实现strcmp
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char str1[20]="hello";
char str2[20]="hell0";
int i=0;
while(str1[i]==str2[i])//相同下标对应元素逐个比较,等于'\0'时结束循环
{
if(str1[i]==0)
break;
i++;
}
if(str1[i]-str2[i]<0)//判断不同元素ASCII值
puts("str1<str2");
else if(str1[i]-str2[i]>0)
puts("str1>str2");
else
puts("str1==str2");
return 0;
}
结果如下:
1.5 非函数实现atoi
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char str[10];
gets(str);
int i=0,sum=0;
while(str[i]==' ')//跳过空格
{
i++;
}
int j=i;//保存+-的下标
if(str[i]=='+'||str[i]=='-')//判断i对应的字符是否是正负号
i++;
while(str[i]!='\0')//循环后面的字符组成整数
{
if(str[i]>='0'&&str[i]<='9')
{
sum=sum*10+(str[i]-'0');
}
else
{
break;
}
i++;
}
if(str[j]=='-')//判断j是否是负号
sum=-sum;//添加负号
printf("sum=%d\n",sum);
return 0;
}
结果如下:
单词逆置
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char str[]="good good study";
int i=0,j=strlen(str)-1;
while(i<j)//整体逆置
{
char t=str[i];
str[i]=str[j];
str[j]=t;
i++;j--;
}
i=j=0;
while(str[i]!='\0')//单词逆置
{
while(str[j]!=' '&&str[j]!='\0')//j循环到空格结束
j++;
int k=j-1;
while(i<k)//交换i到k之间的字符
{
char t=str[i];
str[i]=str[k];
str[k]=t;
i++;k--;
}
while(str[j]==' ')//循环j跳过空格
j++;
i=j;
}
puts(str);
return 0;
}
结果如下:
2.输入三个字符串计算最大字符串
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
char str1[10]="",str2[10]="",str3[10]="";
gets(str1);//输入三个字符串
gets(str2);
gets(str3);
if(strcmp(str1,str2)>=0&&strcmp(str1,str3)>=0)//比较str1与str2及str1与str3的大小
{
puts(str1);
}
else if(strcmp(str2,str1)>=0&&strcmp(str2,str3)>=0)//比较str2与str1及str2与str3的大小
{
puts(str2);
}
else
{
puts(str3);
}
return 0;
}
结果如下:
思维导图: