勉励自己:**生活百般滋味,人生需要笑对。
前言:
本项目是笔者刚开始学完字符串后结合自己的总结,和课本以及老师所讲的,总结出来的字符串
快速入门的一些经典知识,和一道简单的入门题目,希望给大家带来帮助!!
概念部分
字符在输入时通常用单引号括起来,大部分字符都可以用ascll码来表示,而有一些特殊的字符,
如换行键,等只能依靠转义序列来表示。并且所有的ASCLL码字符,都可以用数字转义序列来表示
输入问题
scanf()和getchar()函数都可以用来输入单个字符,但是scanf不会跳过空白符,一般指回车键,
这时候常用的办法是用getchar();吞噬掉空白格,
样例:先读入整数,在读入字符;
常见有三种办法:
scanf("%d",&n);
getchar();//吞噬空格或者回车
scanf("%c",&ch)
scanf("%d",&n);
scanf("%*%c",&ch)
scanf("%d",&n);
scanf(" %c",&ch)//在%c前加上一个空格
一般情况下第一种情况更好用
字符串
字符串既是字符的数组表达形式,末尾有一个零字符’\0’,只作为标志结尾符,无任何实际意义。
字符串的输入输出和初始化
输入输出
一共有三种方法
1)逐个输入,比较麻烦
for(i=0;i<20;i++)
scanf("%c",&str[i]);
for(i=0;i!='\0'&&i<20;i++)
printf("%c",str[i]);
2)以%s格式整体输出,读入回车空格等空白字符时系统自动判定输入结束
char str[20];
scanf("%s",str);
printf("%s",str);
这种方式在输入时无需加地址符,只要输入数组名即可。
3)用gets()和puts()函数输入和输出,但是gets()不能控制输出格式
char str[20];
gets(str);
puts(str);
上述三种中,常用的就是第三种。
初始化
一维数组的定义、引用。初始化方法都适用于字符数组。
样例如下
char t[5]={'H','A','P','P','Y'};
实战
一个简单的入门题
单词个数统计
样例如下
1133: 单词个数统计
时间限制: 1 Sec 内存限制: 128 MB
题目描述
从键盘输入一行字符,长度小于1000。统计其中单词的个数,各单词以空格分隔,且空格数可以是
多少个。
输入
输入只有一行句子。仅有空格和英文字母构成
输出
单词的个数
样例输入 Copy
stable marriage problem Consists of Matching members
样例输出 Copy
7
题解如下
#include<stdio.h>
#include<stdlib.h>
int main ()
{
char a[1000];//定义字符串
int sum,b=0,i;
gets(a);//输入字符串
for(i=0;a[i]!='\0';i++)
{
**if(a[i]!=' '&&a[i+1]==' ')//判断前一个是不是单词**
b++;
}
sum=strlen(a);//strlen是统计字符长度的函数
**if(a[sum-1]!=' ') //最有一个单词的特殊情况,因为上面那个只能判断到倒数第二个单词**
b++;
printf("%d\n",b);
return 0;
}
常见问题
1.经常把char类型的字符串定义为int类型
2.对gets()函数输入不太掌握,要牢记,括号里只输入数组名即可。
3.忽略对空白字符的处理
好了,今天的文章到这就结束了,我们已经对字符串有了一定的了解,下一步就是自己去学习和刷题啦!