课程笔记

C++字符串处理与算法分析

一、知识点总结与回顾
1.字符数组和字符串类型
字符数组定义格式同于一般数组,具体格式:[存储类型] char 数组名 [常量表达式]
例如:
char ch1[5]; //数组ch1是一个具有5个字符元素的一维字符数组
char ch2[3] [5]; //数组ch2是一个具有15个字符元素的二维数组
2.字符数组的赋值
(1).用字符初始化数组
例如:char ch1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};
字符数组中也可以存放若干个字符,也可以来存放字符串 字符串是一维数组,但是一维字符数组不等于字符串。
(2).用字符串初始化数组
用一个字符串初始化一个一维数组,可以写成下列形式:char chr[5]=“abcd”;
对于二维字符数组来讲,可存放若干个字符串。可使用由若干个字符串组成的初始值表给二维字符数组初始化。
(3).数组元素赋值
字符数组的赋值是给该字符数组的各个元素赋一个字符值。
例如:
char chr[3];
chr[0]=‘a’ ; chr[1]=‘b’ ; chr[2]=‘c’ ;对二维数组、三维字符数组也是如此。当需要将一个数组的全部元素值赋予另一数组时,不可以用数组名直接赋值的方式,要使用字符串拷贝函数来完成。
3.字符串的输入与输出
(1).scanf语句
格式:scanf("%s",字符数组名);
说明:系统会自动在输入的字符串常量后添加’\0’标志,因此输入时,仅输入字符串的内容即可。
输入多个字符串时,以空格分隔。
(2).gets语句
格式: gets(字符数组名);
说明:使用gets只能输入一个字符串。读入的是一整行,包括空格。
(3).printf语句
格式:printf("%s",字符数组名);
(4).puts语句
格式:puts(字符串名称);
说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf("%s\n",a)和puts(a)是等价的。
例:C++中,一个字符串中的字符可以通过其对应的下标灵活使用。
  #include
  #include
  #include
  using namespace std;
  int main()
  {
   char st[100];
   gets(st);
   for (int i=0; i<strlen(st); ++i
   cout<<st[i];
   return 0;
  }
  4.字符串处理函数
  strlen(字符串名)计算字符串的长度,终止符’\0’ 不算在长度之内
  strlwr(字符串名)将字符串中大写字母换成小写字母
  strupr字符串名)将字符串中小写字母换成大写字母
 例:请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22] ,数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6 次。
【算法分析1】
  枚举[L,R]区间的所有整数,对于每个整数x:
1.将整数x转化成字符串s,可以用sprintf(s,"%d",x)来实现;
2.枚举字符串s的每个字符判断是否为2。
#include
#include
#include
using namespace std;
char s[10];
int main()
{
int l,r,ans=0;
cin>>l>>r;
for (int i=l; i<=r; ++i)
{
sprintf(s,"%d",i);
l=strlen(s);
for (int j=0; j<=l-1; ++j)
if (s[j]‘2’) ++ans;
}
   cout<<ans;
   return 0;
}
【算法分析2】
  枚举[L,R]区间的所有整数,对于每个整数x:
先判断x的最后一位是否为2(即 x%10
2),然后将x的最后一位删除(即 x/=10),循环操作,直到x值为0。
【参考程序2】
#include
#include
#include
using namespace std;
int main()
{
int l,r,ans=0;
cin>>l>>r;
for (int i=l; i<=r; ++i)
  {
int x=i;
while (x>0)
    {
if (x%10==2) ++ans;
x/=10;
}
}
cout<<ans;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值