描述:编写一个迭代程序来反转一个迭代的字符串
例如:
输入:Protons are zero and neutrons are one
输出:eno era snortuen dna orez era Protons
参考方法:
方案(1)
使用简单的方法是在C ++ 中使用c或std :: reverse()函数。
c++版
// reverse 指定范围内的元素反序排序
void reverse(string&str)
{
reverse(str.begin(),str.end());
}
int main()
{
string str="Protons are zero and neutrons are one";
cout<<"正序排列结果是 : "<<str<<endl;
reverse(str);
cout<<"反序后的结果是 : "<<str<<endl;
return 0;
}方案(2)
使用数据结构中的栈结构,我们将每个字符压入栈,然后再把每个字符弹出,直到栈为空位置。
C++版
void reverse(string&str,unsigned long n)
{
// 创造一个空栈
stack<char> st;
// 将每个字符压栈
for(int i=0;i<n;i++)
st.push(str[i]);
//从0开始
int k=0;
// 弹出字符直到栈空
while(!st.empty()){
str[k++]=st.top();
st.pop();
}
}
int main()
{
string str="Protons are zero and neutrons are one";
cout<<"正序排列结果是 : "<<str<<endl;
reverse(str,str.length());
cout<<"反序后的结果是 : "<<str<<endl;
return 0;
}方案(3)
使用栈结构它的时间复杂度O(n),空间复杂度O(n),如果要求空间复杂度O(1)呢?我们该怎么办?
c++版
void reverse(string&str)
{
// 设置开始和结束的点
unsigned long begin=0;
unsigned long end=str.length()-1;
while(begin<end)
swap(str[begin++],str[end--]);
}
int main()
{
string str="Protons are zero and neutrons are one";
reverse(str);
cout<<""<<str<<endl;
return 0;
}你的参与是我更大的动力!