(一)、统计空格
解决问题:输入一行字符(字符个数不多于80),统计其中空格的个数
#include
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
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
#include
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;
}
(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);
sprintf(str,"%d",n);
功能是把格式化的数据写入字符串str中。sscanf(str,"%d",&n);
功能是从字符串str中进行格式读入