一、字符数组
定义与初始化
字符数组是元素的数据类型为字符类型的数组。例如:char c[6],char[3][4];
字符数组的初始化可以逐个字符赋值,也可以用字符串常量进行赋值。
例如char ch[5]={'b','o','y'};={"boy"};="boy";不够则自动赋值\0。用" "赋值时必须要有\0,否则不行。
char ch[5]={'b','o','y','\0'};进行操作时加上'\0'表示字符数组的结束。
字符'\0'的ASCII码值为0,所以一样,同时也与NULL代表含义相同。
二、字符串
C语言中无字符串变量,用字符数组处理字符串
字符串结束标志:'\0'
char fruit[ ][7]={"apple",orange","banana"};
1、二维数组的定义与打印方法一
#include <stdio.h> //二维数组的定义与打印方法一
int main(int argc, const char *argv[])
{
char fruit[][20]={"appLe", "orange","watermelon"};
int m, n,i,j;
n=sizeof(fruit)/sizeof(fruit[0]);//整个二维数组所占用的空间/每一行所占用的空间=行数
m=sizeof(fruit[0])/sizeof(char );//每一行所占用的空间/任何一个元素所占用的空间=列数
for (i=0;i<n;i++ ){
for (j=0;j<m;j++ ){
putchar(fruit[i][j]);
}
putchar('\n');
}
return 0;
2、二维数组的定义与打印方法二
#include <stdio.h>
int main(int argc, const char *argv[] )
{ //二维数组的定义与打印方法二
char fruit[ ][20]={"apple","orange","watermelon"};
int n, i;
n=sizeof(fruit)/sizeof(fruit[0]);
for (i=0;i<n;i++ ){
printf( "%s\n",fruit[i]);
putchar('\n');
}
return 0;
打印结果为:apple
orange
watermelon
3、练习:逆序输出字符串
①字符串不可自行输入的方法
#include <stdio.h>
int main(int argc, const char *argv[] ) //字符串不可自行输入的方法
char arr[ ]="welcome " ;
int n, i;
n=sizeof(arr )/sizeof(char );
for(i=n- 1:i>=0:i--)
putchar(arr[i]);
putchar('\n');
return 0;
}
②字符串逆输出方法一:输出是逆序
#include <stdio.h> //字符串逆输出方法一:输出是逆序
#include <string.h>
int main(int argc, const char *argv[ ] )
char arr[20];
int n, i;
printf("please input a string:\n");
gets(arr);
n=strlen(arr );
for(i=n-1;i>=0;i--)
putchar(arr[i]);
putchar('\n');
return 0;
}
③字符串逆输出方法二:输入完逆序
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[ ])
{
char arr[20]; //字符串逆输出方法二:输入完逆序
int n,
i, j,temp;
pr intf("please input a string:\n");
gets(arr);
n=strlen(arr);
i=0,j=n-1;
while(i<j){
temp=arr[i];
arr[i]=arr[j];
arr [ j ]=temp ;
i++ ;
j-- ;
}
puts(arr);
putchar('\n' );
return 0;
}
三、字符串函数之strlen、strcy、strcat、strcmp函数
头文件 #include <string.h>
①求字符串长度的函数strlen
长度不包括‘\0’在内
使用方式:
char s[ ]={'1','2'}
int n;
n=strlen(s);
\69:表示8进制数69
\x59:表示16进制数69
②字符串拷贝函数strcpy
格式:strcpy(字符数组1,字符串2)
功能:将字符串2拷贝到字符数组1中去
返值:返回字符数组1的首地址
说明:字符数组1必须足够大,拷贝时'\0'一同拷贝
#include <stdio.h>
#include<string. h>
int main(int argc, const char *argv[ ] )
{
char a[ ]="lalalala";
char b[20];
strcpy(b,a);
puts(a);
puts(b);
return 0;
}
③字符串连接函数strcat
格式:strcat(字符数组1,字符数组2)
功能:把字符数组2连到字符数组1后面
返值:返回字符数组1的首地址
说明:字符数组1必需足够大。连接前,两串均以'\0'结束;连接后,串1的'\0'取消,新串最后加'\0'
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[ ] )
char a[100 ]= "yingyang
char b[ ]= "kuaixian" ;
strcat(a,b);
puts(a);
puts(b);
return 0;
}
④字符串比较函数strcmp
格式:strcmp(字符串1,字符串2);
比较规则:对两串从左向右逐个比较(ASCII码),直到遇到不同字符'\0'为止。
返值:返回int 型整数
a.若字符串1<字符串2,返回负整数-1
b.若字符串1>字符串2,返回正整数1
c.若字符串1==字符串2,返回0
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[] )
{
char a[ ]="abc";
char bi ]="ab"
pr intf(”%d\n",strcmp(a,b));
return 0;
}
四、字符串函数之扩展用法上
①strncpy(p,p1,n)复制指定长度字符串:直接替换掉p的n个字符
#include <stdi0.h>
#include <string.h>
#define N 30
int main(int argc, char *argv[])
char src[] ="makeru" ;
char dest[N] = ".com.cn ;
str@cpy(dest,src,4);
puts(src);
puts (dest) ;
return 0;
}
结果为:makeru
make.cn
②strncat(p,p1,n)附加指定长度字符串
#include <std10. h>
#include <string.h>
#define N 30
int main(int argc, char *argv[])
{
char src[] ="makeru" ;
char dest[N] =".com.cn" ;
strncat(dest, src, 4);
puts(src);
puts(dest) ;
return 0;
结果为: makeru
.com.cnmake
③3strcasecmp忽略大小写比较字符串
④strncmp(p,p1,n)比较指定长度字符串
#include <std10. h>
#include <string .h>
#define N 38
int main(int argc, char *argv[])
{
char s1[] =
QUIT ;
char s2[] =
quit" ;
printf( "%d\n", strncmp(s1, s2, 4));
printf( "%d\n",strcasecmp(sl, s2));
return 0;
}
⑤strchr(p,c)在字符串中查找指定字符
#include <stdio. h>
#include <string.h>
int main(int argc, const char *argv[] )
char a[]=" cbusnjanjzhy";
int ch;
ch='z' ;
printf("%p %p \n" ,a,strchr(a,ch)); //字符串起始位置和查找到的位置一比较即可得出
return 0;
}
⑥strstr(p,p1)查找字符串
#include <stdio. h>
#include <string.h>
{
int main(int argc, char *argv[])
char s[] = "how are you" ;
char subs[] = "are ;
0
printf( "%d\n", strstr(s, subs)-s); //查找到的位置减去字符串起始位置即可
return 0;
⑦isalpha()检查是否为字母字符
⑧isupper()检查是否为大写字母字符
⑨islower()检查是否为小写字母字符
⑩isdigit()检查是否为数字
#include <stdio h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int ch;
while ((ch = getchar()) != EOF) { //判断不是特殊输入ctry+D
if (isalpha(ch)) { //判断是不是字母
if (isupper(ch)) //判断字母是不是大写
printf("Upper:%c\n", ch);
if (islower(ch)) //判断字母是不是小写
printf(" Lower:%c\n" , ch);
}
if (isdigit(ch)) //判断是不是数字
printf("Digit:%d %c\n", ch-'θ', ch); //字符转换成数字
putchar(ch);
}
return 0;
}
#include <stdio. h>
#include <ctype . h>
int main(int argc, char *argv[])
int ch;
while ((ch = getchar()) != EOF) {
if (isalpha(ch)) { //判断是不是字母
if (isupper(ch)) {
ch = tolower(ch); //是大写转为小写
}
else {
ch = toupper(ch); //是小写转为大写
}
}
printf( "%c\n", ch);
}
return 0;
}