c++形式用四个方法实现输出数组--基础

四种不同的方法实现c++数组的遍历

方法一

使用普通的变量进行数组的遍历,这里我简单的通过一个代码来体现一下

#include<iostream>
#define N 10
using namespace std;
void sort(int a[], int n);
void print(int a[], int n);
void main() {
	int a[N];
	cout << "请输入10个数字" << endl;
	for (int t = 0; t < N; t++)
	{
		cin >> a[t];
	}
	sort(a, N);
	print(a, N);
}
void sort(int a[], int n) {
	for (int n = 0; n < N-1; n++)
	{
		for (int j = n + 1; j < N; j++) {
			if (a[n] < a[j]) {
				int t = a[n];
				a[n] = a[j];
				a[j] = t;
			}
		}
	}
}

void print(int a[], int n) {
	for (int n = 0; n < N; n++) {
		cout << a[n]<<" ";
	}
	cout << endl;
}

其中print函数和sort函数都用到了使用变量遍历函数

方法二

使用指针来遍历函数,这个方法c++基础库中的iterator库,找出我们数组堆栈原来的起始位置在哪里进行位置遍历

#include<iostream>
#include<iterator>
using namespace std;
int main() {
	int a[] = { 1,2,3,4,5,6,7,8,9 };
	for (int* p = begin(a); p != end(a); p++) {
		cout << *p << ',';
	}
	return 0;
}

这个是利用c++库中的begin和end函数进行确定数组在储存中的位置进行在两个数组间遍历.

方法三利用数组的自生性质进行遍历

这个是利用数组名本身就是数组第一个变量进行遍历,然后在结合指针输出数组

#include<iostream>
using namespace std;
#define N 10
int main() {
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = a;
	for (int i = 0; i < N; i++) {
		cout << *p << ",";
		p++;
	}
	return 0;
}

方法四

使用c++11官方提供范围循环的方法进行c++数组的遍历,这个代码使用了智能指针和auto自动识别的类型进行编写,我们的案例叫做将数组内的所有数字进行平方和输出字符串的大写形式。

//智能字符认定和范围循环的应用
#include<iostream>
#include<string>
using namespace std;
void main() {
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	string s = "hello come to c++'s world";
	int n = 0;
	for (int i : a)
	{
		cout << i << " ";
	}
	cout << "\n";
	for (int& i : a) {
		i *= i;
	}
	for (int* p = begin(a); p != end(a); p++) {
		cout << *p << " ";
	}
	cout << endl;
	for (char& i : s) {
		n++;
		i = toupper(i);
	}
	cout << "这个一共有" << n << "字符" << endl;
	for (auto c = begin(s); c != end(s); c++) {
		cout << *c;
	}
}

总结

以上就是四种代码的遍历数组的形式,利用指针和数组的性质进行遍历。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用iconv库中的iconv函数将UTF-8编码的string类型转换成Unicode编码的字节数组。具体步骤如下: 1. 引入iconv库头文件: ```c++ #include <iconv.h> ``` 2. 创建iconv_t类型的句柄: ```c++ iconv_t conv = iconv_open("UTF-32LE", "UTF-8"); ``` 其中,第一个参数是目标编码格式,第二个参数是源编码格式。本例中将UTF-8编码的string类型转换成UTF-32LE编码的字节数组。 3. 定义源字符串和目标缓冲区: ```c++ std::string str = "Hello, 世界!"; char* src = const_cast<char*>(str.c_str()); size_t srclen = str.length(); char* dst = new char[srclen * 4]; // 缓冲区大小为源字符串长度的四倍(UTF-32编码下每个字符占4个字节) size_t dstlen = srclen * 4; ``` 4. 调用iconv函数进行转换: ```c++ size_t res = iconv(conv, &src, &srclen, &dst, &dstlen); ``` 其中,第一个参数是iconv_t类型的句柄,第二个参数是源字符串的指针,第三个参数是源字符串的长度,第四个参数是目标缓冲区的指针,第五个参数是目标缓冲区的长度。 5. 关闭iconv句柄并释放资源: ```c++ iconv_close(conv); ``` 完整示例代码: ```c++ #include <iostream> #include <iconv.h> int main() { std::string str = "Hello, 世界!"; char* src = const_cast<char*>(str.c_str()); size_t srclen = str.length(); char* dst = new char[srclen * 4]; // 缓冲区大小为源字符串长度的四倍(UTF-32编码下每个字符占4个字节) size_t dstlen = srclen * 4; iconv_t conv = iconv_open("UTF-32LE", "UTF-8"); size_t res = iconv(conv, &src, &srclen, &dst, &dstlen); iconv_close(conv); std::cout << "转换结果:" << std::endl; for (size_t i = 0; i < srclen * 4 - dstlen; i += 4) { uint32_t ch = *(reinterpret_cast<uint32_t*>(dst + i)); std::cout << std::hex << ch << " "; } std::cout << std::endl; delete[] dst; return 0; } ``` 注意:上述代码中的转换结果是以16进制形式输出的字节数组,如果需要以Unicode字符串形式输出,可以在输出时将字节转换成Unicode字符,或者使用std::wstring类型存储转换结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值