字符数组:
定义与初始化:
字符数组可以通过指定数组大小来定义,也可以在定义时初始化。
char str[10]; // 定义一个可以存储9个字符的字符串,第10位用于存储终止符'\0'
char str[] = "Hello"; // 直接初始化,数组大小自动根据字符串长度确定
存储字符串:
字符数组用于存储字符串时,字符串的末尾会自动添加一个空字符'\0',这在C语言中表示字符串的结束。例如,如果一个字符串是"hello",在内存中它实际上是'h', 'e', 'l', 'l', 'o', '\0'。
访问与修改:
字符数组的元素可以通过下标访问和修改,就像访问普通数组元素一样。
char str[] = "hello";
str[0] = 'H'; // 修改字符串的第一个字符为'H'
字符串输入输出:
输出:字符串可以用printf(),puts()进行输出
char s[6] = "Hello";
int i;
for(i = 0;i < 6;++i)
{
printf("%c",s[i]);
}
printf("\b \n"); //使用printf()进行输出
puts(s); //使用puts()进行输出,s为数组名,代表数组首元素的地址
输入:可以用scanf(),gets(),fgets()输入字符串
char s[100];
scanf("%c",s); //s为数组名,代表数组首元素地址,不需要取地址符&
gets(s); //无法根据数组大小进行数据的输入,易造成数组越界
fgets(s,100,stdin); //可以根据数组大小进行数据的输入,不会造成数组越界,但会将'\n'一起输入
字符串操作函数:
C语言标准库提供了丰富的字符串操作函数,如strlen(), strcpy(), strcat(), strcmp()等,这些函数可以用于获取字符串长度、复制字符串、拼接字符串以及比较字符串等操作。
strlen()函数:获取数组的有效字符的个数即'\0'之前字符的个数
char s[100] = "Hello World!";
int i,counter = 0;
int len = strlen(s); //获取字符串有效字符的个数
for(i = 0;s[i] != 0;++i)
{
++counter; //获取字符串有效字符的个数
}
strcpy()函数:将数组s1中的字符串复制到数组s2中
char s1[100] = "Hello World!";
char s2[100];
strcpy(s2,s1); //将数组s1中的字符串复制到s2中
int i = 0;
while(s1[i])
{
s2[i] = s1[i]; //将数组s1中的字符串复制到s2中
++i;
}
s2[i] = '\0'; //为数组添加结束标志,防止越界
strcat()函数://将数组s1和s2中的字符串拼接在一起
char s1[100] = "Hello";
char s2[100] = "World!";
strcat(s1,s2); //将数组s1和s2中的字符串拼接在一起
int i = 0;
int len;
len = strlen(s1);
while(s2[i])
{
s1[len + i] = s2[i]; //将数组s1和s2中的字符串拼接在一起
++i;
}
s1[len+i] = '\0'; 为数组添加结束标志,防止越界
strcmp()函数:对字符型数组的大小进行比较
char s1[100] = "Horld!";
char s2[100] = "Aorld!";
int a;
a = strcmp(s1,s2); //比较s1和s2的大小,s1大输出正数,s2大输出负数,相等输出0
int i = 0;
while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
{
++i;
}
i = s1[i] - s2[i]; //比较s1和s2的大小,s1大输出正数,s2大输出负数,相等输出0
二分法查找:
二分查找算法,通常用于在一个有序数组中查找特定元素。二分查找的基本思想是将数组分成两半,比较中间元素与目标值的大小,根据比较结果决定是继续在左半部分查找还是右半部分查找,直到找到目标值或者查找范围为空。
int a[] = {1,-2,3,-4,5,-6,7,-8,9,0};
int len = sizeof(a) / sizeof(a[0]);
int begin,mid,end;
begin = 0;
end = len -1;
int i,j,t,n;
printf("请输入需要查找的数:");
scanf("%d",&n);
for(i = 0;i < len - 1;++i) //选择排序
{
for(j = i + 1;j < len;++j)
{
if(a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for(i = 0;i < len;++i)
{
printf("%d,",a[i]);
}
printf("\b \n");
while(begin <= end) //二分法查找
{
mid = (begin + end) / 2;
if(a[mid] > n)
{
end = mid -1;
}
else if(a[mid] < n)
{
begin = mid +1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("找到了a[%d] = %d\n",mid,a[mid]);
}
else
{
printf("未找到\n");
}