利用自定义函数求反序数

/* 
  烟台大学计算机学院 
  作者:任子仪 
  日期:2013年10月6日
  问题描述:
  样例输入:
  样例输出:
  问题分析:
*/  
# include <iostream>
using namespace std;
int reverse(int x)
{
	int r,m=0;
	while (x>0)
	{
		r=x%10;
		m=m*10+r;
		x=x/10;
	}
	return m;
}
int main()
{
	int m,n;
	cin>>m;
	n=reverse(m);
	cout<<n<<endl;
	return 0;
}
示例图片:


心得体会:饿着肚子写程序,越写不出来越恼,肚子越饿,呜呜。。。。功夫不负有心人,在老师的帮助下终于写出来了啊
### C++ 中实现字符串或数组的序操作 在 C++ 编程语言中,可以通过多种方式来实现字符串或数组的向操作。以下是几种常见的方法: #### 方法一:使用标准库 `std::reverse` 函数 C++ 提供了一个非常方便的标准库函数 `std::reverse` 来转容器的内容,包括字符串和数组。 对于 **字符串** 的转: ```cpp #include <iostream> #include <algorithm> // 包含 reverse 函数 #include <string> using namespace std; int main() { string str; cin >> str; // 输入字符串 reverse(str.begin(), str.end()); // 使用 reverse 进行转 cout << str << endl; // 输出转后的字符串 } ``` 对于 **字符数组** 的转: ```cpp #include <iostream> #include <cstring> // 包含 strlen 和其他字符串处理功能 #include <algorithm> // 包含 reverse 函数 using namespace std; int main() { char arr[101]; cin.getline(arr, sizeof(arr)); // 获取多词输入 int length = strlen(arr); reverse(arr, arr + length); // 对字符数组进行转 puts(arr); // 输出转后的字符数组 } ``` 上述两种情况均利用了 `<algorithm>` 头文件中的 `std::reverse` 函数[^1]。 --- #### 方法二:自定义函数 如果不想依赖于标准库或者需要更灵活的功能,则可以编写自己的转逻辑。 以下是一个通用模板用于转任意类型的数组: ```cpp template<typename T> void custom_reverse(T* array, size_t n) { for (size_t i = 0; i < n / 2; ++i) { swap(array[i], array[n - i - 1]); // 交换首尾元素 } } // 测试代码 int main() { int nums[] = {1, 2, 3, 4, 5}; size_t count = sizeof(nums) / sizeof(nums[0]); custom_reverse(nums, count); for (auto num : nums) { cout << num << " "; // 输出转后的整数数组 } return 0; } ``` 此方法适用于任何支持索引访问的数据结构,并通过手动交换两端的元素完成转过程。 --- #### 方法三:逐字打印逆序而不修改原数据 有时可能不需要实际更改存储对象本身,而只是希望按照相方向展示其内容,在这种情况下可以直接遍历并按降序读取每个位置上的值直到开头为止。 例如下面这段程序展示了如何仅改变输出顺序而不是真正意义上的逆转内部表示形式: ```cpp #include <iostream> #include <string> using namespace std; int main(){ string s("hello world"); for(int i=(int)s.length()-1;i>=0;i--){ cout<<s[i]; } return 0 ; } ``` 这种方法不会影响原始变量的状态,仅仅是在屏幕上呈现出了颠倒的效果而已[^3]。 --- #### 方法四:翻转整个句子内的单词排列次序而非单个字母级别上做文章 当面对由多个词语构成的一句话时,除了考虑单独处理每一个组成部分之外还需要额外注意保持它们之间原有的间隔不变才行。这里提供了一种解决方案能够满足这一需求: 给定一段话如"Welcom to Hubei Wuhan", 我们期望得到的结果应该是"Whuan Hubei to Welcome". 下面就是这样一个例子实现了这样的效果: ```cpp #include<bits/stdc++.h> using namespace std ; vector<string> split(const string& s,char delim){ vector<string> elems; stringstream ss(s); string item; while(getline(ss,item,delim)){ if(!item.empty())elems.push_back(item); } return elems; } int main(){ string sentence="Welcome to Hubei Wuhan"; auto words=split(sentence,' '); reverse(words.begin(),words.end()); for(auto it=words.cbegin();it!=words.cend();++it){ cout<<(*it)<<((it!=(words.cend()-1))?" ":""); } return 0; } ``` 该算法首先把完整的语句分割成独立的小单元存放到动态大小可变列表当中去;接着调用了之前提到过的 STL 库里的工具完成了整体布局上的调整工作最后再重新组合起来形成最终形态[^4]. --- ### 总结 以上介绍了四种不同的技术手段用来解决关于怎样用 c plus plus 完成针对不同类型序列执行相应的镜像变换任务的问题。每一种都有各自适用场景以及优缺点所在因此开发者应当依据具体项目需求做出合理的选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值