欢迎来到study-hard-forever的博客

关于字符串与整数转化的问题与一些常用字符串处理函数

关于字符串与整数转化的问题:

数字统计
请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22] ,数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6 次。

【算法分析1】
枚举[L,R]区间的所有整数,对于每个整数x:
先判断x的最后一位是否为2(即 x%10==2),然后将x的最后一位删除(即 x/=10),循环操作,直到x值为0。
【参考程序1】

#include <iostream>
#include <cstdio>
#include <cstring>
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;
}

算法一大概是正常的想法,但是也可以把输入的每个数字先看做字符形式,直接查找字符为“2”的字符进行计数输出:

【算法分析2】
枚举[L,R]区间的所有整数,对于每个整数x:
1.将整数x转化成字符串s,可以用sprintf(s,"%d",x)来实现;
2.枚举字符串s的每个字符判断是否为2。

#include <iostream>
#include <cstdio>
#include <cstring>
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;
}

当然我们需要输出该“字符”时,就要用到整数与字符之间的相互转换:

我们可以通过下面的题目来进行了解:

数字反转:
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零
【算法分析1】
1.将整数N转化成字符串s,可以用sprintf(s,"%d",N)来实现;
2.对字符串进行反转操作;
3.将字符串s转换成数字N,可以用sscanf(s,"%d",&N)来实现。
4.输出数字N。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[100],c[100]; 
int main()
{
      int n,l;
      cin>>n;
      sprintf(s,"%d",n);
      l=strlen(s);
      for (int i=0; i<=l-1; ++i)  c[l-i-1]=s[i];
      if (n<0) cout<<"-";
      sscanf(c,"%d",&n);
      cout<<n;
      return 0;
}

字符串处理函数:
  系统提供了一些字符串处理函数,用来为用户提供一些字符串的运算。常用的字符串函数补充介绍如下:
strcat(字符串名1,字符串名2) 将字符串2连接到字符串1后边,返回字符串1的值。
strncat(字符串名1,字符串名2,长度n) 将字符串2前n个字符连接到字符串1后边,返回字符串1的值。
strcpy(字符串名1,字符串名2) 将字符串2复制到字符串1后边,返回字符串1的值。
strncpy(字符串名1,字符串名2,长度n) 将字符串2前n个字符复制到字符串1后边,返回字符串1的值。
strcmp(字符串名1,字符串名2) 比较字符串1和字符串2的大小,比较的结果由函数带回;
如果字符串1>字符串2,返回一个正整数;
如果字符串1=字符串2,返回0;
如果字符串1<字符串2,返回一个负整数;
strncmp(字符串名1,字符串名2,长度n) 比较字符串1和字符串2的前n个字符进行比较,函数返回值的情况同strcmp函数;
strlen(字符串名) 计算字符串的长度,终止符’\0’不算在长度之内
strlwr(字符串名) 将字符串中大写字母换成小写字母
strupr(字符串名) 将字符串中小写字母换成大写字母

posted @ 2019-03-02 16:55  study-hard-forever  阅读(186)  评论(0编辑  收藏  举报