0

我正在研究一个可以从字符数组中删除重复项的函数。问题是该函数适用于一定数量的字符,但如果数组中有很多项,那么程序就不能正常工作。此外,如果重复的术语彼此相邻,则程序不会将其删除。

void delete_repeats(char array[],int size){
    for(int i = 0; i < size; i++){
        for(int j = i + 1; j < size; j++){
            if(array[i] == array[j] || !((array[j] >= 97) && (array[j] <= 122))){
                for(int k = j; k < size; k++){
                    array[k] = array[k + 1];
                    size--;
                }
            }
        }
    }
}

例子:

原始数组包含:Mary had a little lamp

程序运行后:maryhdliitttlelaampp

4

2 回答 2

0

你减少size得太频繁了。size移动数组的内容后减少。

于 2013-10-31T18:02:07.533 回答
0

将大小从该循环移到外循环:

void delete_repeats(char array[],int size){
  for(int i = 0; i < size; i++){
    for(int j = i + 1; j < size; j++){
        if(array[i] == array[j] || !((array[j] >= 97) && (array[j] <= 122))){
            for(int k = j; k < size; k++){
                array[k] = array[k + 1];
            }
            size--;
        }

    }
  }
}

INPUT: Mary had a little lamb
OUTPUT:  Maryhdlitemb

于 2013-10-31T18:03:56.527 回答