c++交换字符方法大全:
交换1:反向输出法:
其实就是将字符串数组一个一个从最后一个输出到屏幕上,并没有改变数组本身内容。
/************************************/
/**交换1:反向输出法 */
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
char a[10];
int i;
cin>>a;
for(i=strlen(a)-1;i>=0;i--)
cout<<a[i];
return 0;
//}
交换2:交换内容法:
地址传递
地址传递与值传递的不同在于,它把实参的存储地址传送给形参,使得形参指针和实参指针指向同一块地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
/**交换2:交换内容法 */
/**示例代码:*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
void myswap(char *c,int n){
char a;
for(int i=0,j=n;j>i;i++,j--)
{
a=c[i];
c[i]=c[j];
c[j]=a;
/**swap(c[i],c[j]);也可以*/
}
}
int main(){
char a[100];
scanf("%s",a);
int i;
myswap(a,strlen(a)-1);
cout<<a;
}
交换3:交换内容地址法
/**交换3:交换内容地址法 */
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
void myswap(char*s){
char *p, *q;
for (p=s,q=s+strlen(s)-1;p<q;++p,--q)
{ swap(*p,*q); }
}
int main()
{
char a[100];
cin>>a;
myswap(a);
cout<<a;
}
交换4:算法交换法:
reverse在算法文件 < algorithm >中
还有一个知识点,在敲代码时发现string的用法和字符数组的用法不一样
@—@
就是用reverse的时候不可以像下面的代码块用字符数组,而是用
char a[100];
cin.getline(a,sizeof(a));
int m=strlen(a);
reverse(a,a+m);
至于为什么,找了十几篇博客大体意思是这样的
cin.getline意思是读取非‘\n’,的字符然后再取总共有几个字符
用strlen求出有多少元素
因为开始的时候就定义了有几个元素所以不可以用.bengin和.end而是用strlen
然后reverse中打出要交换的元素区间。
/**交换4:算法交换法 */
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
string a;
cin>>a;
reverse(a.begin(),a.end());
cout<<a;
}
交换5:递归子字符串函数交换法:介绍substr的一种用法
/**交换5:递归子字符串函数交换法 */
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
string myswap(string a){
if(a.size()==1)
return a;
else
return myswap(a.substr(1))+a[0];
}
int main()
{
string a;
cin>>a;
cout<<myswap(a);
}
补充:
* substr有2种用法:
* 假设:string s = "0123456789";
* string sub1 = s.substr(5); 只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
* string sub2 = s.substr(5, 3); 从下标为5开始截取长度为3位:sub2 = "567"
* a.size()是取有几个元素的意思
* 代码本身就是从反向输出每一个substr的子字符串,将第一个字符从一开始就存起来一直到a.size()等于1时
* ,开始逐渐从最后一个输出。
*