重复的名称检查功能数组

duplicate name checking function for an array

本文关键字:检查 功能 数组      更新时间:2023-10-16

我仍然是C 的初学者,所以很抱歉,如果问题很简单。

我正在尝试构建一个要求您输入名称并将其注册到数组的程序。然后,我需要调用功能以检查是否有任何重复名称。如果有的话,它要求用户输入另一个名称。

我遇到的问题是,该功能是否被调用,无论是否有重复项,并且始终替换输入的名字。

int checking(string stringArray[5]) {
int i, z ;
for (i = 0; i < 5; i++) {
    for (z = 0; z < 5; z++) {
        if (z != i) { // Makes sure don't check number against itself
            if (stringArray[z] == stringArray[i]) {
                return i;
            }
            else {
                return 0;
int main(){ 
 for (i = 0; i < 5; i++) {
    cin >> stringArray[i];
}
 j = checking(stringArray);
  if (j == 0) {
    cout << "Please re-enter name " << ". Duplicate names are not allowed" 
    <<'n';
    cin >> stringArray[j];
} 

一些观察值(忽略语法错误,我认为这些错误不存在于您的实际代码中):

  1. z不需要每次从0开始,它可以从i 1开始
  2. 您不想在循环中返回,它将阻止您检查第一个重复的名称。而是将您的recenter语句移至循环中。
  3. 通常,您不想在循环中使用文字(5),而是使用变量来存储数组的长度并与之相比(这只是一般编程规则,它不会改变代码运行的方式)

您的最终检查()函数应更近:

void checking(string stringArray[5]) {
    int i, z ;
    // consider replacing 5 with a variable
    for (i = 0; i < 5; i++) {
        for (z = i+1; z < 5; z++) {
            if (stringArray[z] == stringArray[i]) {
                cout << "Please re-enter name " << 
                ". Duplicate names are not allowed" <<'n';
                cin >> stringArray[z];
                /* restart the loop user may have entered a */ 
                /* second duplicate from previous entries */
                i = 0;
                z=i+1;
            }
        }
    }
}