strlen、strcmp、strcpy、strcat、二维数组以及算法在字符串中如何运用——day10
strlen
strcpy --相当于字符串间 赋值
size_t strlen(const char *s);
功能:
获取字符串长度
参数:
s
返回值:
数值,代表该字符串的有效长度
eg:
char s[20] = "hello";
有效长度为5
strcmp
int strcmp(const char *s1, const char *s2);
功能:
比较两个字符串
参数:
s1
s2
表示两个字符串
返回值:
>0 s1 > s2
==0 s1 == s2
<0 s1 < s2
返回值,实际上是,结束位置上字符的差值
eg:
char s[20] = "hello";
char s2[20] = "world";
printf("%d\n",strcmp(s,s2));
结果:-15
strcpy
char *strcpy(char *dest, const char *src);
功能:
字符串复制
参数:
@dest 目标字符串
@src 源字符串
返回值:
src字符串复制给dest
eg:
char s[20] = "hello";
char s2[20];
strcpy(s2,s);
printf("%s\n",s2);
输出:hello
strcat
char *strcat(char *dest, const char *src);
功能:
字符串拼接
参数:
@dest 目标字符串
@src 源字符串
返回值:
成功 返回的是dest
失败 NULL
eg:
char s[20] = "hello";
char s2[20] = "world";
strcat(s2,s);
printf("%s\n",s2);
输出:worldhello
二维数组
二维数组:
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
总结:
1.C语言中,不存在真正的二维数组,只有一维数组
2.二维数组本质,是一维数组的一维数组
二维数组初始化:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4] = {1,2,3,4,5,6,7};
int a[3][4] = {{1,2,3,4},{5,6,7,8}};
如何在字符串数组中使用冒泡排序
#include
#include
int main(void)
{
int n,i,j;
scanf("%d",&n);
char s[n][20];
char temp[20];
getchar();
for(i = 0;i < n;++i)
{
gets(s[i]);
}
for(i = 1;i < n;++i)
{
for(j = 0;j < n - i;++j)
{
if(strcmp(s[j],s[j+1]) < 0)
{
strcpy(temp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],temp);
}
}
}
for(i = 0;i < n;++i)
{
puts(s[i]);
}
return 0;
}
如何在字符串数组中使用插入排序后再进行二分查找
#include
#include
int main(void)
{
int n,i,j,mid;
scanf("%d",&n);
char s[n][20];
char temp[20];
getchar();
for(i = 0;i < n;++i)
{
gets(s[i]);
}
int begin = 0;
int end = n;
for(i = 0;i < n;++i)
{
strcpy(temp,s[i]);
while(strcmp(temp,s[i-1]) < 0 && i > 0)
{
strcpy(s[i],s[i-1]);
--i;
}
strcpy(s[i],temp);
}
printf("Which string to look for:");
gets(temp);
for(i = 0;i < n;++i)
{
mid = (begin + end) / 2;
if(strcmp(temp,s[mid]) > 0)
{
begin = mid + 1;
}else if(strcmp(temp,s[mid]) < 0)
{
end = mid - 1;
}else
{
break;
}
}
if(begin <= end)
{
printf("找到了!\n");
}else
{
printf("Not find!\n");
}
return 0;
}