标签 语法 下的文章

Javascript for-in and forEach

起初在javascript中见到for-in的时候,误以为for-in就是PHP中的foreach(说实在的这些东西怎么用我都快要忘记了),结果发现是我想太多了,for-in怎么用,拿书上输出window的未免太多,看的也不确切,所以在看到面向对象之后自己写了一下。

- 阅读剩余部分 -

Javascript indexOf遍历查找所有子字符串出现的位置

好久没有更新了,六月份因为考试的缘故更是直接跳过了,前面浅浅的读了一下也不知道记些什么好,鉴于这个看着不错的样子就来mark一下。

indexOf()方法,可以从一个字符串中搜索给定的子字符串,和他相反的是lastIndexOf(),这个功能还算常见,正好码这段想到其他问题了,比如:

var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
var positions = new Array();
var pos = stringValue.lastIndexOf("orem");

这段代码的运行结果如何呢,结果是1,而换成indexOf()结果也是1,然后我尝试了不同的测试,似乎所谓的返回子字符串的位置是从打头的字符位置而定的(如果没找到则返回-1)。

- 阅读剩余部分 -

SMU 算法题 情书的编码

题目:

截获了Bobwu的检讨以后,Linkinpaoger突然想到可以用自己的加密方式来加密情书。Linkinpaoger写了一封给Anonymous的情书并加密,然后发现密文中出现了很多类似ABBCCC的字符串。经过思索,Linkinpaoger决定按以下规则压缩密文:

1.任何包含k个相同字符的子串被替换为kX,X表示该子串中的唯一字符。

2.若某个这样的子串长度为1,那么省略‘1’。

按以上规则,ABBCCC将被压缩为A2B3C。现在请你帮Linkinpaoger压缩密文。

输入:

输入的第一行为一个正整数N,表示共有N组测试数据,接下来的每一行表示一组密文,密文仅由‘A'-’Z'组成。

1≤N≤100,每组密文的长度不超过10000个字符长度。

输出:

对于每组输入数据,输出一行压缩后的密文。

- 阅读剩余部分 -

[翻译]如何阅读复杂的C定义/声明

翻译自:How To Read C Declarations 原文

就算是非常有经验的C程序员,也对那些比简单数组/指针更复杂一些的声明感到头疼。比如说,下面这个是一个指针的数组,还是一个数组的指针?

int *a[10];

下面这货到底是什么?

int (*(*vtable)[])();

当然了,这货是一个指针,指向一个数组,这个数组的每个元素是一个指针,指向一个函数,函数的返回值类型是int :)

这篇短文希望能够教会你一个非常简单地读懂复杂声明的方法。我99%肯定我在80年代读过这篇,但是不记得具体是在什么地方读到的了。我怀疑是我自己发现这个的(尽管我总会被计算机语言结构和神秘的事物搞得很兴奋)。然而我的确记得,能够写出一个程序,将任何声明转换成英语。

- 阅读剩余部分 -

C 一道题再来说说关于scanf输入

题目如下:

一份计算机市场调查报告显示,市场上PC机的售价不同:6500,4990,5500,7200,6810,5700,5660,6900,5850,6250。编写程序,计算平均售价以及最大差价(最大差价=最高售价-最低售价)。

当然那题目给出的输入方式是不断空格的,那么难道因为这个我们就需要使用%d %d %d直到10吗?实际上并不需要,直接输入就可以了,缓冲区这个概念应该还记得,当scanf()读到空白字符(包括enter和space),剩下的并不是直接丢弃,而是存在缓冲区,而读取的时候从第一个非空白字符开始读取,所以,我们使用循环结构,一路用空格就行了,直到清空了缓冲区。

我们来看看这个程序的源码吧

#include <stdio.h>

#define NUM 10

int main(void)
{
    int i;
    float sales[NUM];
    float sum = 0, max = 0, min = 0;

    printf("Please input %d sales: \n", NUM);
    for (i = 0; i < NUM; i++) {
        scanf("%f", &sales[i]);
        sum += sales[i];
        if (i == 0) {   /* min max 初始化 */
            max = sales[i];
            min = sales[i];
        }
        if (sales[i] > max)
            max = sales[i];
        if (sales[i] < min)
            min = sales[i];
    }

    printf("ave = %f  range = %g\n", sum / NUM, max - min);

    return 0;
}

关于%g这是一个很好的新东西,在C 转换说明符%g已有介绍
扩展阅读:C 一个程序说说scanf()判断

C 转换说明符%g

题目:

编写一个函数,返回一个double数组中最大的和最小的数之间的差值,并在一个简单的程序中测试这个函数。
对于题目无感,很容易,只是有一点疑惑,因为答案写的时候是
printf("The gap between  max and min is: %g\n",gap( array, WIDTH));

感觉很神奇,%g是什么?在我的笔记-说明符中并没有记录,然后翻到书上的章节里,也没有详细介绍,只是把它归类为解释成浮点型。

结果输出:

2.6
9.2
The dif between max and min is : 6.6

没有多余的0,看着很舒服。

- 阅读剩余部分 -

C define与const的不同

其实这个是困惑了我好久的问题,没想到在上机课做到的题里找到了答案——我的困惑是:#defineconst到底有什么区别。

题目:

#define N 2 
#define M N+1 
#define NUM 2*M+1 
int main(void) 
{  int i; 
   for(i=1;i<=NUM;i++)  printf(“%d\n”,i); 
} 
该程序中的for循环执行的次数是( )
A) 5 B) 6 C) 7 D) 8

答案是6,跑过以后怎么都不理解,这是因为忽略了#define的重大不同。

- 阅读剩余部分 -