Gleiche Werte in einem Array



  • hi
    wie kann man denn gleiche werte in einem array erkennen?
    von diesen gleichen "wertpaaren" immer y start und y ende der gleichen werte bestimmen?

    #include <string>
    #include <iterator>
    #include <iostream>
    #include <algorithm>
    #include <array>
    
    int main()
    {
    	int array[5][12]={{1,2,3,4,5,6,7,8,9,10,11,12},
    					  {1,2,3,4,5,6,7,8,9,10,11,12},
    					  {1,2,3,4,5,6,7,8,9,10,11,12},
    					  {1,2,3,4,5,5,7,8,9,18,18,12},
    					  {1,2,2,5,5,5,7,8,9,9,11,11}};
    
    	int xi=0;
    	int yi=0;
    
    	for(yi=0;yi<12;yi++)
    	{
    	  for(xi=0;xi<5;xi++)
    	  {
    		std::cout << array[xi][yi] << ";";
    	  }
    	  std::cout << std::endl;
    	}
    
    	xi=4;
    	for(yi=0;yi<12;yi++)
    	{
    		//wie kann man hier die von den gleichen Wertpaaren y "start" und "ende" bestimmen?
    		std::cout << array[xi][yi] << ";";
    
    		//in etwa so?
    		if( array[xi][yi]==array[xi][yi+1] )
    		{
    			std::cout << array[xi][yi] << std::endl;
    		}
    	}
    }
    

    lg 😃



  • so würde er mir schonmal die richtigen y werte ausgeben...
    geht das vll auch anders? bzw. kann man das anders machen vll mit ner funktion oder soetwas?

    for(yi=0;yi<12;yi++)
        {
            //wie kann man hier die von den gleichen Wertpaaren y "start" und "ende" bestimmen?
            std::cout << array[xi][yi] << ";";
    
            //in etwa so?
            if( array[xi][yi]==array[xi][yi-1]  || array[xi][yi]==array[xi][yi+1] )
            {
                std::cout << "Wert: " << array[xi][yi] << std::endl;
                std::cout << "yi: " << yi << std::endl;
            }
    


  • Wenn Du einen vernünftigen Satz in Deutscher Schriftsprache "zu Papier" brächtest, könnte man Dir evtl. helfen.

    Aber sowohl

    MfG schrieb:

    wie kann man denn gleiche werte in einem array erkennen?
    von diesen gleichen "wertpaaren" immer y start und y ende der gleichen werte bestimmen?

    als auch

    MfG schrieb:

    so würde er mir schonmal die richtigen y werte ausgeben...
    geht das vll auch anders? bzw. kann man das anders machen vll mit ner funktion oder soetwas?

    ergeben keinen Sinn. Da helfen auch keine Smileys. 😞

    Mit ganz viel Fantasie könnte ich mir vorstellen, dass Du sowas wie std::adjacent_find() aus <algorithm> meinst.

    #include <algorithm>
        #include <iterator>
        //....
        using namespace std;
        for(auto& r : array)
          for(auto first = adjacent_find(begin(r), end(r));
    	  first!=end(r);
    	  first = adjacent_find(first+1, end(r)))
    	cout << *first << ' ' << *next(first) << '\n';
    


  • Furble Wurble schrieb:

    Wenn Du einen vernünftigen Satz in Deutscher Schriftsprache "zu Papier" brächtest, könnte man Dir evtl. helfen.

    Aber sowohl

    MfG schrieb:

    wie kann man denn gleiche werte in einem array erkennen?
    von diesen gleichen "wertpaaren" immer y start und y ende der gleichen werte bestimmen?

    als auch

    MfG schrieb:

    so würde er mir schonmal die richtigen y werte ausgeben...
    geht das vll auch anders? bzw. kann man das anders machen vll mit ner funktion oder soetwas?

    ergeben keinen Sinn. Da helfen auch keine Smileys. 😞

    Mit ganz viel Fantasie könnte ich mir vorstellen, dass Du sowas wie std::adjacent_find() aus <algorithm> meinst.

    #include <algorithm>
        #include <iterator>
        //....
        using namespace std;
        for(auto& r : array)
          for(auto first = adjacent_find(begin(r), end(r));
    	  first!=end(r);
    	  first = adjacent_find(first+1, end(r)))
    	cout << *first << ' ' << *next(first) << '\n';
    

    warum sollen smiles helfen ? ich hab nur 1 ganz am ende.
    so schlimm sind die sätze nun auch nicht, aber ok ich versuchs mal anders zu erklären oder auch besser zu formulieren.

    ich suche "etwas"(eine funktion/methode/algo .
    vergleichbares...) was mir den array-index der wertepaare liefert.
    wie in meinem beispiel. also ich will wissen von wo bis wo im array gleiche werte stehen. z.B. wert: 5 -> array[1][2], array[1][3] ; 6-> array[..][..] (aber orientiert an der spalte) usw. aber nur den bereich in dem die doppelten sind. so wie in meinem beispiel. sortiert sind die werte schon.

    sry wenn ich mich anfangs i.wie undeutlich ausgedrückt habe, aber ich weiß nicht wie ich das treffend und eindeutig formulieren kann 😞 .



  • ich brauch was was mir sagt wie der "bereich" der gleichen werte einer spalte lautet.

    z.B.:

    int array[3][6]={{ 3, 3, 3, 1, 4, 4},
                     { 3, 3, 3, 2, 5, 5},
                     { 3, 1, 0, 3, 1, 1}};
    

    mir dann sagt das von array[3][0]-array[3][2] sind Wert "3" dann noch array[3][4]-array[3][5] sind wert "4"...
    usw. also immer wenn 2 oder mehr gleiche werte folgend stehen diese "erkennt" und mir einen Bereich gibt in dem die gleichen Werte vorhanden sind.



  • std::equal_range() aus <algorithm> .



  • Furble Wurble schrieb:

    std::equal_range() aus <algorithm> .

    ok schau ich mir mal an , vielen dank . 🙂


Log in to reply