删除数组中的相同术语

时间:2013-10-31 17:59:59

标签: c arrays

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

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

2 个答案:

答案 0 :(得分:0)

您经常减少size。移动数组内容后减少size

答案 1 :(得分: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

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