反转字符串 C++
Reverse a string C++
我是编程新手。我今天学会了如何反转字符串。我尝试使用字符串而不是字符,但终端给出了错误。
string name = { "george" };
int nChar = sizeof(name) - 1;
string *pName = &name;
string *pNameLast = &name + nChar - 1;
while(pName < pNameLast) {
string save = *pName;
*pName = *pNameLast;
*pNameLast = save;
pName++;
pNameLast--;
}
cout << name << endl;
这里是一个使用std::reverse_interator
的例子。这是更好的方法。而不是自己做。
#include <iostream>
#include <string>
#include <iterator>
int main()
{
std::string s = "George";
std::reverse_iterator<std::string::iterator> r = s.rbegin();
std::string rev(r, s.rend());
std::cout << rev << endl;
}
如果你想反转字符串对象,只需执行以下操作(注意这是许多手工方法之一:
#include <iostream>
#include <string>
int main() {
std::string my_string{"hello"};
// Similar to your way:
int index{static_cast<int>(my_string.length() - 1)};
for (; index >= 0; --index) {
std::cout << my_string.at(index) << std::endl;
}
}
问题:
当您尝试执行 string *pName = &name
和
string *pNameLast = &name + nChar - 1;
,您将 std::string
视为 char*
。你不能那样做并期望代码能工作。
解法:
将 std::string
视为 std::string
。而不是 string *pName = &name
将 pName
声明为 int
并使用 std::string
的运算符 []
来访问值。与 pNameLast
类似。您还必须将 string save
声明为 char
或者,如我所愿,使用 std::swap
函数。
附加信息:
- 据我所知,当您将
std::string
声明为 string
时,您可能正在使用 using namespace std;
。如果是这种情况,请考虑 using namespace std;
被认为是一种不好的做法(更多信息 here)。
完整代码:
#include <iostream>
int main() {
std::string name = "george";
int length = name.size();
int pNameFirst = 0;
int pNameLast = length - 1;
while(pNameFirst < pNameLast)
{
std::swap(name[pNameFirst],name[pNameLast]);
pNameFirst++;
pNameLast--;
}
std::cout << name << std::endl;
}
我是编程新手。我今天学会了如何反转字符串。我尝试使用字符串而不是字符,但终端给出了错误。
string name = { "george" };
int nChar = sizeof(name) - 1;
string *pName = &name;
string *pNameLast = &name + nChar - 1;
while(pName < pNameLast) {
string save = *pName;
*pName = *pNameLast;
*pNameLast = save;
pName++;
pNameLast--;
}
cout << name << endl;
这里是一个使用std::reverse_interator
的例子。这是更好的方法。而不是自己做。
#include <iostream>
#include <string>
#include <iterator>
int main()
{
std::string s = "George";
std::reverse_iterator<std::string::iterator> r = s.rbegin();
std::string rev(r, s.rend());
std::cout << rev << endl;
}
如果你想反转字符串对象,只需执行以下操作(注意这是许多手工方法之一:
#include <iostream>
#include <string>
int main() {
std::string my_string{"hello"};
// Similar to your way:
int index{static_cast<int>(my_string.length() - 1)};
for (; index >= 0; --index) {
std::cout << my_string.at(index) << std::endl;
}
}
问题:
当您尝试执行 string *pName = &name
和
string *pNameLast = &name + nChar - 1;
,您将 std::string
视为 char*
。你不能那样做并期望代码能工作。
解法:
将 std::string
视为 std::string
。而不是 string *pName = &name
将 pName
声明为 int
并使用 std::string
的运算符 []
来访问值。与 pNameLast
类似。您还必须将 string save
声明为 char
或者,如我所愿,使用 std::swap
函数。
附加信息:
- 据我所知,当您将
std::string
声明为string
时,您可能正在使用using namespace std;
。如果是这种情况,请考虑using namespace std;
被认为是一种不好的做法(更多信息 here)。
完整代码:
#include <iostream>
int main() {
std::string name = "george";
int length = name.size();
int pNameFirst = 0;
int pNameLast = length - 1;
while(pNameFirst < pNameLast)
{
std::swap(name[pNameFirst],name[pNameLast]);
pNameFirst++;
pNameLast--;
}
std::cout << name << std::endl;
}