C++指针小练习

发布时间:2024年01月11日

双色球统计1-33个数字出现的次数(很详细)

做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数

算法设计:

①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0,

②:通过初始化同一个变量来保存(0-32个数字),然后再将这个变量作为p2数组的下标,实现同一个下标相加的时候就是在确定该数出现的次数

③:怎么确定变量的值,就是用数组p1的值减1就可以作位变量的值,(因为数组p1是1-33个数组的随机值,所以他减1就是在设置1-33个数据的下标)然后再遍历p1这个数组的时候,就可以为变量重复赋值

运行的结果:

注:出现的结果中第一个球,并不是文件中的第一个数字,而是值为1的数字

#include <iostream>
#include <assert.h>
#include <fstream>
#include <string>

using namespace std;
#define NUM 7

bool statius(const char* path, int* ball_33, int len) {
	int ball_7[NUM];//用一个数组p1来保存每一行的数据,
	ifstream file;
	
	file.open(path);
	
	if (!path){
		return false;
	}
	if (file.fail()){

		cerr << "文件打开错误!" << strerror(sizeof(file)) << endl;
	}

	do{
		int i;
		for (i = 0; i < NUM; i++) {
			file >> ball_7[i];
			if (file.eof()) {
				break;
			}
			if (file.fail()) {
				cerr << "数据读取失败!" << strerror(errno) << endl;
				break;
			}
		}
		
		if (i == 0)break;
		if (i < NUM) {
			cout << "不满预计的7个数" << endl;
			continue;
		}
		for (i = 0; i < NUM; i++) {
			cout << ball_7[i]<<" ";
		}
		cout << endl;
		for (int i = 0; i < NUM; i++){//循环为变量赋值
            //就是用数组p1的值减1就可以作位变量的值,(因为数组p1是1-33个数组的随机值,所以他减1
            //就是在设置1-33个数据的下标)然后再遍历p1这个数组的时候,就可以为变量重复赋值
			int index = *(ball_7 + i)-1;
			if (index >= 0 && index < len) {
                //通过初始化同一个变量来保存(0-32个数字),然后再将这个变量作为p2数组的下标,实                   
                //现同一个下标相加的时候就是在确定该数出现的次数
				*(ball_33 + index) += 1;//用变量作为数组p2的下标
			}
		}

	} while (1);
	file.close();
	return true;
}

int main(void) {
	string filename;
    //再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0,
	int ball_33[33] = { 0 };

	cout << "please input you filename:" << endl;
	cin >> filename;
	

	//将文件名传入函数
	if (!statius(filename.c_str(), ball_33, 33)) {
		cerr << "统计错误!" << endl;
		exit(-1);
	}

	for (int i = 0; i < 33; i++)
	{
		cout <<"第"<<i+1<<"个球出现的次数:" << *(ball_33 + i) << " " << endl;
	}
	return 0;
}

?实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”

#include <iostream>

using namespace std;
/*
1. 实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”
*/
int main(void) {
	string str = "我是小萌新";

	int len = str.length();
	cout << str << endl;
	for (int i = 0; i < str.length() / 2; i += 2, len -= 2) {
		int ret = str[i];
		str[i] = str[len - 2];
		str[len - 2] = ret;

		ret = str[i + 1];
		str[i + 1] = str[len - 1];
		str[len - 1] = ret;
	}
	cout << str << endl;
	return 0;
}

有一个整形数组, a[3] = {7,2,5}, 要求使用指针实现数组成员由小到大的顺序排列,即 结果为:a[3] = {2,5,7};

#include <iostream>

using namespace std;
/*
有一个整形数组, a[3] = {7,2,5}, 要求使用指针实现数组成员由小到大的顺序排列,
即 结果为:a[3] = {2,5,7};

*/
int main(void) {
	int a[3] = { 7,2,5 };

	for (int i = 0; i < sizeof(a)/sizeof(int); i++){
		for (int j = 0; j < sizeof(a) / sizeof(int); j++)
		{
			if (a[i] < a[j]) {
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			}
		}
	}
	for (int i = 0; i < sizeof(a) / sizeof(int); i++)
	{
		cout << a[i] << " ";
	}
	return 0;
}

?实现一个函数,函数完成如下功能:
1.函数的输入为一个数组,数组的成员个数不定(即:可能为 0 个,也可能为多个)
2.函数找到成员的最大元素和最小元素,并能让函数的调用者知道最大元素和最小元素
是哪一个

#include <iostream>

using namespace std;
/*
实现一个函数,函数完成如下功能:
1.函数的输入为一个数组,数组的成员个数不定(即:可能为 0 个,也可能为多个)
2.函数找到成员的最大元素和最小元素,并能让函数的调用者知道最大元素和最小元素
是哪一个

*/

void select(int a[] ,int len,int **max,int **min) {

	for (int i = 0; i < len; i++) {
		for (int j = 0; j < len; j++)
		{
			if (a[i] < a[j]) {
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			}
		}
	}
	*max = &a[len-1];
	*min = &a[0];
}

int main(void) {
	int arr[] = { 1,3,2,1,2,3,4,5,6,8,0,4,1 };
	int* max = NULL;
	int* min = NULL;
	
	int len = sizeof(arr) / sizeof(int);

	select(arr, len, &max, &min);

	cout << "最大值:" << *max << " 最小值:" << *min;
	return 0;
}

?实现一个函数,使用指针连接两个字符串。

函数输入: 两个源字符串的指针,目的字符串的指针

?

#include <iostream>

using namespace std;
/*
实现一个函数,使用指针连接两个字符串。
函数输入: 两个源字符串的指针,目的字符串的指

int extern_a = 10;
*/

int cat(char * str,char *str1, char* p[]) {
	int i = 0; 
	int k = 0;
	while (str[i]!=0){
		p[i] = &str[i];
		i++;
	}
	while (str1[k]!=0){
		p[i] = &str1[k];
		i++;
		k++;
	}
	for (int i = 0; i < sizeof(p)/sizeof(char); i++) {
		cout << *p[i];
	}
	int len = sizeof(p) / sizeof(char);
	return len;
}

int main(void) {
	char str[50];
	char str1[50];
	char str2[100];
	char* p[100];
	for (int i = 0; i < 100; i++){
		p[i] = &str2[i];
	}
	cout << "请输入第一个字符串:" << endl;
	cin >> str;
	rewind(stdin);
	cout << "请输入第二个字符串:" << endl;
	cin >> str1;
	
	int len = cat(str, str1, p);
	cout << endl;
	for (int i = 0; i < len; i++) {
		cout << *p[i];
	}
	return 0;
}

文章来源:https://blog.csdn.net/qq_48397625/article/details/135485965
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。