1.基本概念
字符数组:用于存储字符序列的数组。
字符串:以'\0'(空字符)结尾的字符数组。这是C语言中识别字符串的标准方式。
字符串常量:如"Hello",是编译器自动在末尾添加'\0'的字符序列。
2.字符数组的定义与初始化
定义:char arr[size]; 定义了一个能够存储size个字符的数组。
直接初始化:char arr[] = "Hello"; 编译器自动在数组末尾添加'\0'。
逐个字符初始化:char arr[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 明确指定每个字符,包括结尾的'\0'。
注意:'\0'(空字符)是字符串的结束标志。
3.字符串的输入输出
输入:
scanf("%s", arr); 注意:此方法不读取空格,且可能导致缓冲区溢出。
fgets(arr, sizeof(arr), stdin); 可读取空格和换行符,更安全。
输出:
printf("%s\n", arr); 输出字符串后换行。
puts(arr); 输出字符串后自动添加换行符。、
4.字符串处理函数
包含头文件:#include <string.h>
长度:strlen(str) 返回字符串str的长度,不包括结尾的'\0'。
char s[100] = "Hello World!";
int i,counter = 0;
int len = strlen(s); //获取字符串有效字符的个数
for(i = 0;s[i] != 0;++i)
{
++counter; //获取字符串有效字符的个数
}
复制:strcpy(dest, src) 将src字符串复制到dest中,包括'\0'。
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(dest, src) 将src字符串追加到dest字符串的末尾,包括'\0'。
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(str1, str2) 比较两个字符串,返回整数表示比较结果。
int main(void)
{
char s1[100] = "Hello";
char s2[100] = "World!";
unsigned long a =strlen(s1),b = strlen(s2);
int i =0,j;
//printf("%d\n",strcmp(s1,s2));
while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
{
++i;
}
printf("%d\n",s1[i]-s2[i]);
}
查找字符:strchr(str, ch) 在str中查找字符ch,返回首次出现的地址。
查找子串:strstr(str, substr) 在str中查找子串substr,返回首次出现的地址。
5.二分法
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");
}