字符数组与字符串(上)

一、字符数组与字符串

(一)、统计空格
解决问题:输入一行字符(字符个数不多于80),统计其中空格的个数

#include<stdio.h>
int main(void)

{
    
    
     char str[80];

     int i,count = 0;

     printf("请输入字符串:\n");
     gets(str);

     for(i = 0; str[i] != '\0';i++)
     {
    
    
          if(str[i] == ' ')
          count++;
     }

     printf("空格数为%d\n",count);
     return 0;
}

(二)、一维字符数组与字符串
一维字符数组的定义、引用、初始化与其他类型的一维数组一样。

/*定义一个含80个字符型元素的数组str*/
char str[80];

/*初始化数组t*/
char t[5] = {
    
    'H','a','p','p','y'};

1、字符串常量
字符串常量是双引号括起来的任意字符序列

例如:
"Hellow World"
"Welcome china\n"//字符串常量中可以包含转义序列

2、字符串的存储
char s[80] = “Happy”;
字符串遇到’\0’结束
第一个’\0’前面所有的字符和’\0’一起构成了字符串"Happy"

3、字符串与字符数组
(1)、在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串
(2)、字符数组和字符串的区别是:字符串的末尾有一个空字符‘\0’

/*字符串可按如下方式声明并初始化*/
char name[15] = {
    
    'W','a','n','g','L','i','\0'};//手工加一个空字符
char name[15] = "WangLi";//系统将自动加入一个空字符
char name[] = ""12345678;//省略数组的大小,系统自动计算,大小为后面的字符总数+1,最后一个元素存入一个空字符

//后面两种为数组赋初值的方式,本质上与第一种方式本质相同,只是写出了我们更习惯的样子

(三)、字符串的输入输出
方法1:用%s整体输入输出

char name[10];
scanf("%s",name);
printf("%s",name);

方法2 ;用gets和puts函数

char name[10];
gets(name);//使用gets函数允许输入空格
puts(name);

(四)、统计单词个数
解决问题:从键盘读入一个字符串,统计其中的单词个数。
解法1:如果一个空格后跟一个非空格,一定是新单词开始;且第一个字符不是空格则count+1

#include<stdio.h>
int main(void)

{
    
    
     char str[80];

     int i,count = 0;

     gets(str);

     for(i = 0; str[i] != '\0';i++)
     {
    
    
          if(str[i] == ' '&&str[i+1] != ' ')
          count++;
     }
     
     if(str[0]!=' ')
          count++;


     printf("单词数为%d\n",count);
     return 0;
}

解法2:如果一个非空格后是一个空格,一定是单词的结束

#include<stdio.h>
#include<string.h>
int main(void)

{
    
    
     char str[80];

     int i,count = 0;
     int len;

     gets(str);

     for(i = 0; str[i] != '\0';i++)
     {
    
    
          if(str[i] != ' ' && str[i+1] == ' ')
          count++;
     }

     len = strlen(str);
     if(str[len - 1]!=' ')
          count++;

     printf("单词数为%d\n",count);
     return 0;
}

二、常用字符串函数

(一)、定义在头文件string.h中的字符串中的函数

(1)、strlen:求字符串的长度

例如:
char str[10] = "china";
printf("%d\n",strlen(str));
或者:
printf("%d\n",strlen("china"));
输出结果都为5

(2)、strcpy:字符串的复制

例如:
char str1[10],str2 = ("shanghai");
strcpy(str1,str2);
或者:
strcpy(str1,"shanghai");
即将str2的字符串复制给了str1

(3)、strcmp:字符串的比较

比较字符串的大小只能使用这个函数
strcmp(str1,str2) > 0;//str1大
strcmp(str1,str2) < 0;//str2大
strcmp(str1,str2) = 0;//str1和str2一样大

(4)、strcat:字符串的合并

例如:
char str1[10] = "shanghai ";
char str2[10] = "beijing";
strcat(str1,str2);
printf("%s",str1);

输出结果为:shanghai beijing

(5)、strev:字符串的逆置

调用格式:
strrev(str);

(二)、stdio中字符串函数

sprintf(str,"%d",n);
功能是把格式化的数据写入字符串str中。

sscanf(str,"%d",&n);
功能是从字符串str中进行格式读入

猜你喜欢

转载自blog.csdn.net/m0_46518461/article/details/106696647