nikhil arora Ответов: 2

Как взять проверку дубликата в момент вставки строки


в принципе, я хочу создать структура в C в которой я собираюсь взять 50 входов
1.country Name
2.Player name
3.batting average


и печать этих 50 входов должна быть такой, чтобы ни одно имя игрока не было похожим в одной и той же стране.
е.г

India
Nikhil
возможный случай.


Australia
Nikhil
возможный случай.


снова
India 
Nikhil
невозможный случай.

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
struct cricket
{
    char country_name[50];
    char player_name[50];
    int batting_average[50];
};
int compare_string(char[],char[]);



int main()
{
    int i=0;
    struct cricket t;
    int flag;

        printf("enter the player name\n");
        gets(t.player_name);
        printf("Enter country name\n");
        gets(t.country_name);
        printf("enter the batting average\n");
        gets(t.batting_average);
        flag=compare_string(player_name,country_name);

    int compare_string(char[],char[])
    {

            while(player_name[c]==country_name[c])
           {
               if(player_name[c]=='\0'||country_name[c]=='\0')
               break;
               c++;

           }
    }
     if(player_name[c]=='\0'&&country_name[c]=='\0')
        return 0;
    else
        return -1;

CHill60

В чем ваша настоящая проблема? (Кроме того, что ваш код не будет компилироваться)

2 Ответов

Рейтинг:
15

Jochen Arndt

Есть стандартная библиотечная функция для сравнения строк: ссылка strcmp - C++ [^].

Но ваш фактический код далек от решения вашего задания. Вам понадобится массив ваших struct cricket и целочисленная переменная, указывающая, сколько записей массива содержат данные. Затем выполните итерацию по элементам массива, содержащим данные, и проверьте, идентичны ли новые страна и имя пользователя значениям из элемента массива.


nikhil arora

можете ли вы показать мне, например, как я должен действовать, чтобы решить эту проблему?

Jochen Arndt

См. приведенное ниже Решение CPallini.

Рейтинг:
1

CPallini

Я предлагаю вам выгодно использовать C библиотечная функция strncmp[^]. Попробуйте, например,

#include <stdio.h>
#include <string.h>


struct cricket
{
    char country_name[50];
    char player_name[50];
    int batting_average[50];
};

// returns 0 if the names match
int comp_cricket_names(struct cricket * pc1, struct cricket * pc2)
{
  int c = strncmp( pc1->country_name, pc2->country_name, sizeof(pc1->country_name));
  if ( c == 0 )
   c = strncmp( pc1->player_name, pc2->player_name, sizeof(pc1->player_name));

  return c;
}

int main()
{
  struct cricket ck[3];

  strcpy(ck[0].country_name, "India");
  strcpy(ck[0].player_name, "Nikhil");

  strcpy(ck[1].country_name, "Australia");
  strcpy(ck[1].player_name, "Nikhil");

  strcpy(ck[2].country_name, "India");
  strcpy(ck[2].player_name, "Nikhil");


  int i;
  for (i=0; i<2; ++i)
  {
    int j;
    for (j=i+1; j<3; ++j)
    {
      if ( comp_cricket_names(&ck[i], &ck[j]) )
        printf("team %d and %d have different names\n", i, j);
      else
        printf("team %d and %d have same names\n", i, j);
    }
  }
  return 0;
}