Checking an array of data for similar elements in C -


मैंने एक "पता" संरचना बनाई है। प्रत्येक पते (xx.yy.zz.mm) में एक एक्सएक्स, य्, ज़्ज़ और मिमी तत्व होता है, जो सभी इन्सटी हैं। प्रत्येक पते में इसके साथ "नाम" तत्व भी होता है।

मेरे पास "नेटवर्क" नामक 100 पते तक की एक सरणी है यहां नेटवर्क में कुछ तत्वों का एक उदाहरण है:

186.88.1.21 टायलर
186.88.9.11 बॉब 101.21.0.13 टॉम
111.11.3.89 चक
101.21.5.99 ल्यूक < / P>

मुझे प्रत्येक पते की जांच करने की आवश्यकता है और देखें कि क्या समान स्थान से अन्य पते हैं। दो पते उसी स्थान से हैं यदि तत्व xx और yy समान हैं। यदि एक ही स्थान से 1 या अधिक पते हैं, तो मुझे इस जानकारी को आउटपुट करने की आवश्यकता है।

नीचे ऐसा कुछ कोड है जिसे मैंने करने की कोशिश की है:

  char temp [1 1]; Int nameCount; के लिए (i = 0; i & lt; गिनती; i ++) {चार नाम [100] [10] = {}; Strcpy (temp, नेटवर्क [i] .name); अस्थायी [11] = '\ 0'; NameCount = 0; के लिए (जे = आई + 1; जम्मू & lt; count; j ++) {यदि (नेटवर्क [i] .xx == नेटवर्क [जे] .xx और amp; नेटवर्क [i] .yy == नेटवर्क [जे] .आई ) {Strcpy (नाम [नामकाउंट], नेटवर्क [जे] .name); nameCount ++; }} यदि (nameCount == 0) printf ("% s के लिए कोई मेल नहीं। \ N", temp); Else {printf ("% s", अस्थायी); के लिए (j = 0; j & lt; nameCount; j ++) printf ("और% s", नाम [i]); Printf ("एक ही स्थान से हैं। \ N \ n"); }}  

यह कोड एक ही स्थान से है, जो सरणी में पहले दो पते के लिए काम करता है, लेकिन यह बाकी के लिए काम नहीं करता है (हालांकि ऐसा लगता है कि यह लगभग होता है - यह नाम के स्थान पर रिक्त स्थान का मुद्रण है, लेकिन इसमें रिक्त स्थान की सही संख्या है)। मैं ऊपर सूचीबद्ध पते के लिए आउटपुट है (खराब स्वरूपण के लिए खेद है):

 टायलर और बॉब एक ​​ही स्थान से हैं बॉब के लिए कोई मेल नहीं है टॉम और [अंतरिक्ष] और [अंतरिक्ष] एक ही स्थान से हैं चक के लिए कोई मेल नहीं है ल्यूक और [स्थान] एक ही स्थान से हैं निक के लिए कोई मेल नहीं है 

यह भी लगता है कि एक नया अक्षर है जो प्रत्येक नाम के अंत में जोड़ा गया है।

यहां कम से कम कई समस्याएं हैं।

0: temp [11] एक चार सरणी में बारहवीं तत्व है जिसे आपने 11 तत्वों तक परिभाषित किया है। यह एक बफर उग आया है।

1: नाम [100] [10] होना चाहिए नाम [100] [11] , ताकि प्रत्येक तत्व temp से एक मान को स्टोर करने के लिए पर्याप्त है।

2: आप strcpy () का उपयोग कर रहे हैं, फिर एक समाप्ति वाला चरित्र सम्मिलित कर रहे हैं, संभवत: अगर आपने 10 से अधिक वर्णों की प्रतिलिपि बनाई है strcpy ()। उस स्थिति में, आपके पास डेटा अतिप्रवाह है आप strncpy () का उपयोग करना चाहते हैं, और तब स्ट्रिंग समाप्त करें।

  strcpy (temp, network [i] .name); अस्थायी [11] = '\ 0';  

के साथ

  strncpy (temp, network [i] .name, sizeof (temp) - 1); Temp [sizeof (temp) - 1] = '\ 0';  

और प्रतिस्थापित

  strcpy (नाम [nameCount], नेटवर्क [j] .name); nameCount ++; नाम (नाम [नाम काउंट], नेटवर्क [जे] .नाम, आकार (नाम [नामक संख्या] - 1); नाम [नामक संख्या]  

के साथ

[Sizeof (nameCount) - 1] = '\ 0'; nameCount ++;

3: जिस पाश में आप "और% s" सूची मुद्रित करते हैं वह गलत चर का उपयोग करके सरणी को हटा रहा है। आप 'जे' का उपयोग कर फिर से चल रहे हैं, लेकिन 'i'th तत्व को खींच कर।

4: जहां तक ​​नई लाइन जाती है, यह बहुत ही मामला है [नेटवर्क] [नाम] I) इसमें एक नया पंक्ति शामिल है जिसे आप कॉपी कर रहे हैं।

5: यदि आपके पास एक ही स्थान से तीन चीजें हैं, तो शायद आप उनको एक तरह से सूचीबद्ध कर सकते हैं जिन्हें आप नहीं चाहते हैं।

  1.1.1.1 चक 1.1.2.2 लारी 1.1.3.3 बिफ  

संभवतः आउटपुट (एक बार अन्य कीड़े तय हो जाएंगी)

  चक और लारी और बिफ उसी स्थान से हैं, लैरी और बिफ एक ही स्थान से हैं, बिफ के लिए कोई मैचों नहीं है।  

उस समस्या को ठीक करने के लिए एक अभ्यास के रूप में छोड़ दिया जाता है।


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -