字符数组和字符串的使用

一、字符数组

定义与初始化

字符数组是元素的数据类型为字符类型的数组。例如: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;
}

猜你喜欢

转载自blog.csdn.net/qq_52049228/article/details/129632427