C 数组中彼此相邻的等号序列号

C 数组中彼此相邻的等号序列号,c,arrays,C,Arrays,输入:5 输出:0。1.2.3.四, 我做了一些修改,现在它打印两个相等数字的序列。 I:1234-O:1。2. 但是如果所有的数字都相等呢?/。。。 Input: 1 2 3 7 7 7 6; Output: 3. 4. 5. //处理索引0 如果(num[0]==num[1])printf(“0”); //处理索引1。。N-2 对于(int k=1;k1){ 而(iprev1){ 而(iprev

输入:5 输出:0。1.2.3.四,

我做了一些修改,现在它打印两个相等数字的序列。 I:1234-O:1。2. 但是如果所有的数字都相等呢?

/。。。
Input: 1 2 3 7 7 7 6;
Output: 3. 4. 5.
//处理索引0 如果(num[0]==num[1])printf(“0”); //处理索引1。。N-2 对于(int k=1;k
您可以在不将数字存储在数组中的情况下解决此问题,但在读取当前数字之前,必须跟踪已读取的相等数字的数量:

// ...

    // deal with index 0
    if (num[0] == num[1]) printf("0. ");

    // deal with indexes 1 .. N - 2
    for (int k = 1; k < n - 1; k++) {
        if ((num[k - 1] == num[k]) || (num[k] == num[k + 1])) {
            printf("%d. ", k);
        }
    }

    // deal with index N - 1
    if (num[n - 2] == num[n - 1]) printf("%d. ", n - 1);

// ... possibly with a printf("\n"); somewhere
#包括
#包括
内部主(空)
{
int i=0;//运行索引
int prev=0;//以前读取的数字
int iprev=0;//以前读取的相等数字范围的开始
int n;//当前读取的数字
而(scanf(“%d”,&n)==1){
如果(n!=上一个){
如果(i-iprev>1){
而(iprev1){
而(iprev
只有在读取终止等值的当前范围的数字之后,才能考虑等量的数字。当所有数字都不同时,该范围的大小为1,我们不打印任何内容。如果范围大于1,则打印所有有问题的索引


因为在读取最后一个数字后没有注意到变化,所以必须在主循环之后单独检查最后一个范围

如果可以在数组的[0]元素中放入非数字字符,则不需要对第一个元素进行不同的测试

    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
        int i = 0;          // running index
        int prev = 0;       // previously read number
        int iprev = 0;      // start of range of equal numbers previously read
        int n;              // currently read number

        while (scanf("%d", &n) == 1) {
            if (n != prev) {
                if (i - iprev > 1) {
                    while (iprev < i) printf("%d\n", iprev++);
                }
                iprev = i;
                prev = n;
            }

            i++;
        }

        if (i - iprev > 1) {
            while (iprev < i) printf("%d\n", iprev++);
        }

        return 0;
    }
int main(无效)
{
/*数据数组的位置0中的非数字*/
字符myList[]={'.','1','2','2','3','4','4','5','6','6'};
int listSz=strlen(myList)-1;
int n;
/*检查所有东西,最后一个除外*/
对于(n=1;n

产出:2。3.5.6.7.9 . 10

你的程序会做什么?表达式
num[i]==num[i+1]
会将数组的初始化部分与未初始化部分(其值不确定)进行比较,从而导致未定义的行为。提示:首先读取所有数字,然后检查它们。另外,如果
n
等于或大于
100
您将越界,并且再次具有未定义的行为。那么输出不应该是
3、4
?是谢谢你的提醒:-)不幸的是,我不得不使用数组。在这种情况下,你已经有了答案。但是,如果您先读取数组,然后使用
for
循环数组,而不是在
循环时使用
读取字符,则也可以对数组使用此策略。(您的原始代码同时读取和处理数组,这接近于在不存储数组的情况下读取当前值,只是您可以使用look back。)
    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
        int i = 0;          // running index
        int prev = 0;       // previously read number
        int iprev = 0;      // start of range of equal numbers previously read
        int n;              // currently read number

        while (scanf("%d", &n) == 1) {
            if (n != prev) {
                if (i - iprev > 1) {
                    while (iprev < i) printf("%d\n", iprev++);
                }
                iprev = i;
                prev = n;
            }

            i++;
        }

        if (i - iprev > 1) {
            while (iprev < i) printf("%d\n", iprev++);
        }

        return 0;
    }
int main (void)
{
    /* non-numeric in position 0 of data array */
    char myList[] = {'.','1','2','2','3','4','4','4','5','6','6'};
    int listSz = strlen(myList) -1;
    int n;

    /* check everything except last */
    for (n = 1; n < listSz; n++) {
        if(( myList[n] == myList[n +1]) || ( myList[n] == myList[n -1] )) {
            printf("%d . ", n);
        }
    }

    /* check last */
    if( myList[listSz] == myList[listSz -1] ) {
            printf("%d", n);
    }
    printf("\n");
}