cpp: pointer

 指针读二维数组

	int arr[3][4] = { {14,2,3,14},{14,5,6,7} ,{18,9,10,11} };
	int* p;
	p = arr[0];
	for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
	{
		cout <<"\t"<< &arr[i] << endl;
		//p = arr[i];
		cout << *p++ << endl;
	}

  

	int* t;
	t = &arr[0][0];
	for (int kk = 0; kk < 3; kk++)
	{
	
		for (int Column = 0; Column < (sizeof(arr[kk]) / sizeof(arr[0][kk])); Column++)
		{
			cout << *t++ << endl;
		}
	}
	int(*pp)[4]; //Column 4
	int i, j;
	for (i = 0; i < 3; i++)
	{
		pp = &arr[i];
		cout << "Row" << i << ":";
		for (j = 0; j < 4; j++)
			cout << "\t" << *(*pp + j);
		cout << endl;
	}

	std::vector<int> v {3, -4, 2, -8, 15, 267};

	auto print = [](const int& n) { std::cout << n << ' '; };

	std::cout << "before:\t";
	std::for_each(v.cbegin(), v.cend(), print);
	std::cout << '\n';

	// increment elements in-place
	std::for_each(v.begin(), v.end(), [](int& n) { n++; });

	std::cout << "after:\t";
	std::for_each(v.cbegin(), v.cend(), print);
	std::cout << '\n';

	struct Sum
	{
		void operator()(int n) { sum += n; }
		int sum{ 0 };
	};

	// invoke Sum::operator() for each element
	Sum s = std::for_each(v.cbegin(), v.cend(), Sum());
	std::cout << "sum:\t" << s.sum << '\n';

  

 

 

    /// <summary>
    /// 整数转二进制
    /// </summary>
    /// <param name="n">整数</param>
    /// <param name="len">显示几位,如5位</param>
    /// <returns></returns>
    string  GeovinDu::DecimalToBinary(int n, int len) {
        string ss = "";
        int binaryNumber[100], num = n;
        int i = 0;
        while (n > 0) {
            binaryNumber[i] = n % 2;
            n = n / 2;
            i++;
        }
        //cout << "Binary form of " << num << " is ";
        std::string new_string = "";
        for (int j = i - 1; j >= 0; j--)
            ss = ss + to_string(binaryNumber[j]);
        if (ss.length() < len)
            new_string = std::string(len - ss.length(), '0') + ss;
        else
            new_string = ss;
        return new_string;
    }

  

 

 

  /// <summary>
    /// 获取二进制字符串含“1”字符占位的序号集合(从零开始的连续序号)
    /// </summary>
    /// <param name="str">二进制字符串集合</param>
    /// <param name="len">第几位</param>
    /// <returns></returns>
    vector<int> GeovinDu::getOneInt(vector <string> str,int len)
    {

        vector<int> nn;
        int k = 0;
        for (string ss : str)
        {
           
            if (ss.substr(len, 1) == "1")
            {
                nn.push_back(k);
            }
            k++;
        }
        return nn;
    }

    /// <summary>
    /// 读心术
    /// </summary>
    void GeovinDu::displayReadHeart()
    {
        int number = 0;
        char input;
        cout << "***" << endl;
        int num[32];
        for(int i=0;i<=31;i++)
        {
            num[i] = i;
           
        }
        vector<string> strnum;
        for (int i = 0; i <= 31; i++)
        {
            string ssd = bitset<5>(num[i]).to_string();
            strnum.push_back(DecimalToBinary(num[i],5));          
        }
        int i = 0;
        for (string s : strnum)
        {
            cout <<i<<":"<< s << endl;
            i++;
        }
        vector<int> nn;
        nn = getOneInt(strnum, 0);
        string str = "";
        for (int d : nn)
        {
           // cout << d << endl;
            str = ""+str + to_string(d)+"  ";
        }

        cout << "猜出心中所想数" << endl;
        cout << str << endl;
        cout << "请你选好之后,输入Y即可正式进入猜数游戏" << endl;
        cin >> input;
        if (input == 'Y' || input == 'y')
        {
            number = 16;
        }
        nn = getOneInt(strnum, 1);
        str = "";
        for (int d : nn)
        {
           // cout << d << endl;
            str = "" + str + to_string(d) + " ";
        }
        cout << str << endl;
        cout << "1请你回答是否有猜中数YES和NO,输入Y或N即可" << endl;
        cin >> input;
        if (input == 'Y' || input == 'y')
        {
            number += 8;
        }
        nn = getOneInt(strnum, 2);
        str = "";
        for (int d : nn)
        {
            // cout << d << endl;
            str = "" + str + to_string(d) + " ";
        }
        cout << str << endl;
        cout << "2请你回答是否有猜中数YES和NO,输入Y或N即可" << endl;
        cin >> input;
        if (input == 'Y' || input == 'y')
        {
            number += 4;
        }
        nn = getOneInt(strnum, 3);
        str = "";
        for (int d : nn)
        {
            // cout << d << endl;
            str = "" + str + to_string(d) + " ";
        }
        cout << str << endl;
        cout << "3请你回答是否有猜中数YES和NO,输入Y或N即可" << endl;
        cin >> input;
        if (input == 'Y' || input == 'y')
        {
            number += 2;
        }
        nn = getOneInt(strnum, 4);
        str = "";
        for (int d : nn)
        {
            // cout << d << endl;
            str = "" + str + to_string(d) + " ";
        }
        cout << str << endl;
        cout << "4请你回答是否有猜中数YES和NO,输入Y或N即可" << endl;
        cin >> input;
        if (input == 'Y' || input == 'y')
        {
            number += 1;
        }

        cout << "猜中你想的数:" << number << endl;

    }

  

 

 

 

 

 

 

posted @ 2023-05-21 10:27  ®Geovin Du Dream Park™  阅读(17)  评论(0)    收藏  举报