精华内容
下载资源
问答
  • 如果直接sizeof的话4,但是如果直接遇到\0就结束为什么直接打印又会越界呢?![图片](https://img-ask.csdn.net/upload/201709/08/1504884843_807731.png)![图片]...
  • 然后下面有T行, 每行一个只含有0~9的字符串,表示N张叠在一起的卡片,最左边的数字表示最上方的卡片。 [Technical Specification] T 1 Output 对于每组测试数据,请在一行内输出能得到的最小数。 ...
  •  utf8编码下的测试,varchar(5) 这里的5 限制的储存字符的个数,其实这里的字符不分贵贱(- - 不分 中文、英文、数字...),如果插入时,超出了该范围的字符串长度,会警告,且只存储前面定长的宽度,超出的...

    char,跟varchar的最大长度都是255


    utf8编码下的测试,varchar(5)  这里的5 限制的是储存字符的个数,其实这里的字符不分贵贱的,中文、英文、数字都可以。


    如果插入时,超出了该范围的字符串长度,会警告,且只存储前面定长的宽度,超出的部分自动截取掉,这里对应信息保存完整的话,要特别注意哦!


    更新操作时,如果也是超出范围的字符串,则直接抛异常了,不会对原有数值进行修改


    gbk(gb2312_chinese_ci)的时候,存储中文跟utf8结果是一样的,所以字符不分贵贱,中文,英文,数字,都算一个字符

    展开全文
  • 在word 我经常看到一个字计数功能,因此,它如何实现,当然,首先想到的要经过整个文本换行和空格分析字符串,。但是能不能简单点了,事实上对文本做单词分析,大家都知道怎么做,难得地方可能就是代码的实现了...

    咳咳。这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助。

    在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经过整个文本换行和空格分析字符串,。但是能不能简单点了,事实上对文本做单词分析,大家都知道怎么做,难得地方可能就是代码的实现了。那么如今假设使用正則表達式来实现的话,那么一切问题就Over 了。

    环境:ubuntu(当然装了flex的windows和mac也能够)

    原码:

    %{
    unsigned long chars=0;
    unsigned long words=0;
    unsigned long lines=0;
    %}
    
    %%
    [a-zA-Z]+               {words++;chars+=strlen(yytext);}
    [a-z\-A-z]+             {words++;chars+=strlen(yytext);}
    [0-9]+                  {words++;chars+=strlen(yytext);}
    [.|,|\b| |\t|\r]        {chars++;}
    [\n]                    {lines++;chars++;}
    %%
    
    int main()
    {
       char filename[100];
       printf("统计一个英文文件里字符、单词、行数。\n");
       printf("请输入要计算的文件名称:");
       scanf("%s",filename);
       yyin=fopen(filename,"r");
       printf("開始进行统计...\n");
       printf("没有定义的字符:");
       yylex();
       printf("\n字符数:%ld\n", chars);
       printf("单词数:%ld\n", words);
       printf("行数  :%ld\n", lines);
       return 1;
    }
    int yywrap()
    {
        return 1;
    }

    那么解释第一个正则式[a-zA-Z]+  表示一个或者多个由大写和小写字母组成的单词

    [a-z\-A-z]+             对于特殊的中间加"-"的单词

    [0-9]+                 数字集合

    [.|,|\b| |\t|\r]          特殊符号集合

    在编写完上述代码之后,那么直接用flex 进行编译。将得到一个.c文件,接着对C文件编译生成二进制代码执行就可以。

    測试文本:

    my name is te-name
    %%%


    測试结果:


    统计一个英文文件里字符、单词、行数。
    请输入要计算的文件名称:test.txt
    開始进行统计...
    没有定义的字符:%%%
    字符数:20
    单词数:4
    行数  :2




    版权声明:本文博客原创文章。博客,未经同意,不得转载。




    本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4643724.html,如需转载请自行联系原作者


    展开全文
  • 1:先把数字转位二进制 1 2 4 8 16 对应的分别是1 10 100 1000 10000 然后比如你要7是分别有哪些组成,7 的二进制是111...那么匹配上面看出只有 前面两个数是1,然后映射到对应的数字就是4和8。说明12是由4个8组成 ...

    问题:

    1 2 4 8 16 32 64 128 256 512 1024...这些数字任意几个相加,怎么算出是那几个相加?
    1+4+8=13 怎么算出是 1 4 8 这三个数字相加?
    4+32+64=100 怎么算出是 4 32 64 这三个数字相加?
    2+8+128+512=650 怎么算出是 2 8 128 512 这四个数字相加?
    任意几个数字 可以是1个 2个 3个 4个等等多个数字相加 (不重复,每个数字只能用一次)
    直接给一个数字 172 怎么算出是那些数字相加得出的(4+8+32+128=172)

     

    解决:

    1:先把数字转位二进制
    1 2 4 8 16 对应的分别是1 10 100 1000 10000
    然后比如你要算7是分别有哪些组成,7 的二进制是111
    那么1+10+100 = 111 (然后可以根据string 的字符去匹配也可以 按照占位符来弄)
    然后比如你要算7是分别有哪些组成,12 的二进制是1100
    那么匹配上面看出只有 前面两个数是1,然后映射到对应的数字就是4和8。说明12是由4个8组成

     

    上段代码,自行理解

    展开全文
  • 比如一个字符串"heLLo12WorL11d12",其中12...但是实际字符随机输入的,所以实际字符串的内容不能确定,如果单个数字我会算,但是这种多位数怎么算啊, 求大神指教。能用Java语言解答最好不过了,在此谢过。
  • 不知道平时大家是怎么访问或者说是打开 Google、百度这些网站的,但我掐指一,你会用下面几种方式。 1 ...

    不知道平时大家是怎么访问或者说是打开 Google、百度这些网站的,但我掐指一算,你会用下面几种方式。

    1 收藏好网站,要打开就直接点击。

    2 用域名访问,在地址栏输入域名,回车访问。

    以上两种都是我们 99% 的人访问网站的方式,但难道就没有其他方式了吗?

    很多猿们肯定还会说,我还可以用 IP 访问呀,你忘了?

    3 用 IP 访问,在地址栏输入 IP,回车访问。

    那如何获取到这个 IP 呢?其实也很简单,可以到 www.ip.cn 这个网站里输入域名来查询对应的 IP,当然也可以去其他网站中查询。也可以使用 Ping 命令 来帮助我们获取域名对应的 IP。只要我们 ping 一下域名就可以了。
    在这里插入图片描述

    但是你以为就只有这几种方式了吗?No,No,No!

    后面的才是我要说的重点,也是我写这篇文章的目的,假如只是前面的几个点,其实没有什么好说的,99% 的人都知道。都知道的事情我何必分享呢?我要分享的当然是大家不知道的。

    今天我就来泄露一下天机

    4 用数字来访问,在地址栏输入协议://数字 ,回车访问。如 https://2899904127

    不知大家有去试试,当我们输入协议和数字并回车后,它自动换成 IP,然后再换成域名。

    更厉害的是,这个数字可以用十进制 表示,也可以用八进制 表示,还可以用十六进制 表示,我相信用其他进制也可以,但常用的进制就这些,也没那个必要,谁那么无聊会用这种方法来访问一个网站呢?要真那样,设计域名就变得毫无意义了。

    但作为技术人,我们不仅要知道可以这样访问网站,还要知道其中的奥秘,也就是原理,今天就来揭秘一下。

    按照协议规定,在 IPv4 中,IP 地址用二进制表示,每个 IP 地址长 32 Bit,也是 4 个字节。为了方便,人们使用「 点分十进制表示法 」表示,即每个字节的二进制数被转成十进制数
    在这里插入图片描述
    每个字节中间使用符号『 . 』分开,即 172.217.6.127

    也就是说,我们熟知的 IP 地址字符串,本质上由二进制数按点分规则 转换而来,那既然这 IP 是一个数,那它就可以用任何一种进制来表示

    先来说十进制,也就是 IP 地址字符串如何转成十进制数字?
    在这里插入图片描述

    我们先来看看前面 IP 地址字符串(172.217.6.127)是怎么由二进制数转换而来的
    在这里插入图片描述

    它是把每一个字节(8 bit)转换成十进制数,关键就在每一个字节,而每一个字节最多能存 2^8 = 256 个数。我们去掉『 . 』,前面 IP 就变成 172 217 6 127 ,也就是说它是一个 256 进制数 ,但别混淆是:127 在 256 进制中,其实就是相当于十进制的个位数,它还只是一位数而已,还没满 256,不产生进位,它是一个整体,不是多位数,其它的 172、217 在 256 进制中就相当于一位数,172 217 6 127 ,在 256 进制中就四位数是而已。
    在这里插入图片描述
    而我们知道,其他进制转十进制数都非常简单,套用公式就可以。

    假如一个 N 进制 X 位数是:abc……yz,那就是
    在这里插入图片描述
    所以 IP 172 217 6 127 转换成十进制数就是

                                        172 * 256^3 + 217 * 256^2 + 6 * 256^1 + 127 * 256^0 = 2899904127
    
                                    

    在这里插入图片描述
    看到这里,相信都知道为什么我们输入协议加上数字也可以访问网站了吧。

    Talk Is Cheap,Show Me Code

    理解了,咋们来看代码,了解一下转换过程

                                        public long ipToLong(String ipStr){
           //用 . 分割 IP 字符串,取出其中的数字
           //参数传得是正则表达式, . 有特殊意义,不能直接传,需要转义,或者用 [.] 匹配
           String[] arrayIP = ipStr.split("\\.");
           long sip1 = Integer.parseInt(arrayIP[0]);
           long sip2 = Integer.parseInt(arrayIP[1]);
           long sip3 = Integer.parseInt(arrayIP[2]);
           long sip4 = Integer.parseInt(arrayIP[3]);
           long r1 = sip1 * 256 * 256 * 256;
           long r2 = sip2 * 256 * 256;
           long r3 = sip3 * 256;
           long r4 = sip4;
           long result = r1 + r2 + r3 + r4;
           return result;
       }
    
                                    

    这样的算法通俗易懂,但不高效,空间也占得多。 咋们优化一下,看看下面的

                                        public long ipToLong(String ipStr) {
           long result = 0;
           String[] ipAddressInArray = ipStr.split("\\.");
           for (int i = 3; i >= 0; i--) {
               long ip = Long.parseLong(ipAddressInArray[3 - i]);
               // 等同 A * 256^3 + B * 256^2 + C * 256^1 + D * 256^0,运用位移更高效
               //1. 172 <<24 (左移 24 位相当于乘于 256^3 即 2^24,以下类似)
               //2. 217 <<16
               //3. 6   <<8
               //4. 127 <<0
    		  // 不同数位加相 | 相当于不同数位相加( 0 | X = X)  ->1200 | 00XX = 12XX
               result |= ip <<(i * 8);
           }
           return result;
       }
    
                                    

    是不是整个人都好了。 当然还有其他的写法,就不一一列举了。

    另外,我们当然也可以先把 IP 字符串转成二进制数,再转成十进制树,但这样更麻烦,还是上面的方式来得更直接。

    那数字转 IP 地址字符串呢? 有前面的基础,逆向思考,下面代码应该很好理解

                                        public String longToIp(long ip) {
        return  ((ip >>24) &0xFF) + "."+
                ((ip >>16) &0xFF) + "." +
                ((ip >>8) &0xFF) + "." +
                (ip &0xFF);
    }
    
                                    

    有人可能疑惑为什么要 &0xFF ?其实就是 &11111111 ,目的就是为了与出一个字节(8 bit),因为点分法是按字节(8 bit) 拆分IP的,前面说了。

    图文解释可以清楚一点,先要知道,在二进制运算中,0 &X = 0,1 &X = X ,0 与任何数都得 0,1 与任何数都得任何数。

    最开始是这样的,十进制数字转成二进制数字,然后拆分为四部分,如下图
    在这里插入图片描述

    为了取到从左边起的第一个字节,左移 24 后,只剩下 10101100
    在这里插入图片描述
    &0xFF&11111111 ,即 得到 10101100,转换成十进制后就是 172

    说到这,可能还不是很明白,看完下面就明白了。

    再看,为了取到从左边起的第二个字节,左移 16,但得到 10101100 11011001,包含了左起第一个字节。
    在这里插入图片描述

    但是我要取的是第二个字节 11011001,所以就再 &0xFF&11111111 ,也就是
    在这里插入图片描述
    一 &,前面的字节就没了,这样,就取到了 11011001,再转换成十进制数后就是 217。

    以此类推,就先位移,再分别 &,就取出每个字节,转成成十进制数,在添加上 . 就成了 IP 地址字符串了。不知我说明白没有!

    至于 IP 字符串转其他进制的数字,相信看完前面的说明,不管是要 IP 字符串转成不同进制的数字还是从数字转成 IP 字符串,大家都能类推出来。

    展开全文
  • 经过3次转折(每次向右转90°),回到出发点,而且呢,他每次转折前总是跑相同长度的路程,所以很多人都想知道如果用‘1’他跑步出发的第一个残影的话,那么回到起点的时候,他的残影是怎么样的呢? Input ...
  • 经过3次转折(每次向右转90°),回到出发点,而且呢,他每次转折前总是跑相同长度的路程,所以很多人都想知道如果用‘1’他跑步出发的第一个残影的话,那么回到起点的时候,他的残影是怎么样的呢? Input ...
  • 假如有这么一个字符串“黄腾霄好瘦哦”,需要使用程序找出这个字符串包含几个字,怎么找? var s=“黄腾霄好瘦哦”; var len=s.Length; 很简单是不是。那再看看这个字符串,“黄腾霄也能瘦????”,不出意料的话...
  • 回到出发点,而且呢,他每次转折前总是跑相同长度的路程,所以很多人都想知道如果用‘1’他跑步出发的第一个残影的话,那么回到起点的时候,他的残影是怎么样的呢? Input 测试数据有多行,每一行为一个N...
  • 因为从左边第一个不相同的第二个字符,A[2] = ( , B[2] = )。对于长度 N,由于定义了小于关系,则可以通过这个关系推出所有长度为N的合法括号序列的大小关系,对于长度为6的合法括号序列,从小到大排列顺序如下:...
  • 整型在字符数组中的存储

    千次阅读 2018-04-26 19:58:36
    这篇文章我们来讨论整型在字符数组中的存储首先我们来讨论一下字符大家都知道一个字符占用一个字节,无符号字符型的范围从0~255,而有符号字符型的范围...请您往下欣赏:以-129为例,我向...
  • 题目概述给出 n,mn,m ,若一个 0101 序列在任意位置满足 11 的个数大于 00 的个数,则该序列满足条件的。求由 nn 个 00 , mm 个 11 组成的满足条件的序列个。解题报告n=mn=m 的时候...怎么算?将 11 看成向上走,
  • print(len(a))结果为:**每个汉字、数字、字母、标点符号一个长度2.字符串格式化: "woshi{}".format("xiaoxuan") 这个操作可以怎么理解呢?就是在大括号里后续可以填自己想填的东西,具体...
  • 然后A行,每行有一个字符串和一个整数,分别表示依上场顺序给出的客队的投手名字(由字母组成,保证没有空格,不超过20个字符),以及他被替换下场时的局数(局数从1起)。如果他没有被替换下场,则用’E’表示...
  • 至多删三个字符

    2021-05-23 23:13:54
    若第i个字符删了,则前i-1个字符删去j个字符dp[i-1][j-1]一定不同的,因为这之前已经过的了 若第i个字符不删,则就要小心了!!!! 因为如果不删,相当于选一个前缀加上第i个字符组成新的字符串,若之前有一...
  • 假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都...刚学编程的时候我们用的方法都试拼接一个足够唯一的字符串(比如时间戳加用户ID等等)然后再用MD5或者SHA1散列算法出一个散列值,用这种方...
  • 目录1.题目2.自我思路及实现3.总结思路及实现4.相关知识 1.题目 剑指 Offer 20. 表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。...我们学习下其他人是怎么实现的吧! 3.
  • 题目:英文字符规律统计。编写一个程序,对给定字符串中出现的a-z字母频率进行分析,忽略大小写,采用降序...不是很明白map()函数的用法,这里是是怎么算求和的? 还有话说编程前会不会写一个流程图之类的来理清思路?
  • 笔试时经常会考到不同类型的值加减法问题,每次都很头大,于是抽空总结一下,如有问题请...但是第二条,我不是很理解到底该怎么转,下边列举的一些常见情况,不全面勿喷哦~ 数字与字符串相加结果是字符串 ...
  • HDOJ1735-字符统计

    2020-10-12 11:51:01
    个人感觉假如最后一段假如全0怎么算?就是未到n行结果之后全为0,那应该至少前几行满字,最后一行一个字。但测得数据并无这种情况。另一点假如污染后的段反而小于总段落不是无解了? 改进书中代码地方:不必要...
  • 那么匹配至少 30个字符的 正则怎么写呢 var reg = /^[\S]{30,}$/ 记住 {30, } 这样错误的 {30,} // 这样对的 30逗号 后面 不能加空格 直接跟着 否则就会报 匹配不到 这个也个小细节问题吧 关注我 持续...
  • 它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么“AC”,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题“AC”后,就要与你帐了,总共该题...
  • 至少\(k\)个字符串的子串就是求子树内不同 考虑怎么统计答案 不要做本质不同子串做傻了 这题问有多少个子串,子串相同位置不同可以重复统计的 直接找字符串的每个后缀,它们前缀对应的子串开始位置都...
  • 它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么“AC”,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题“AC”后,就要与你帐了,总共该题...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

字符数是怎么算的