Yar*_*ani 0 c++ string reverse for-loop c-strings
所以我想在 c++ 中做最简单的事情,反转一个字符串(存储新字符串)然后打印它
我的代码是:
char a[size] , reverse[size];
strcpy(a,"dlow olleh " );
for (int i = 0 ; i <= strlen(a); i++) {
reverse[i]= a[strlen(a)-i];
}
cout << reverse ;
Run Code Online (Sandbox Code Playgroud)
我必须注意,当 cout << reverse[i] ; 在 for 循环中,一切都很好,但是当我想将它打印为字符串时,它只是不这样做,我无法理解我错过了什么 cout << reverse[i] ;
我究竟做错了什么?
您正在使用charC 标准库的数组和函数来操作 C++ 中的字符串。
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string foo{ "Hello, World!" };
std::string bar{ foo };
std::reverse(bar.begin(), bar.end());
std::cout << '\"' << foo << "\" ==> \"" << bar << "\"\n";
}
Run Code Online (Sandbox Code Playgroud)
如果——出于某种超出我理解的原因——你*必须*步行,以惯用的方式完成并提供一个带有一对迭代器的接口:
#include <algorithm>
void str_reverse(char *begin, char *end)
{
while (begin < end)
std::swap(*begin++, *--end);
}
// ...
#include <cstring>
// ...
char foo[]{ "Hello, World!" };
str_reverse(foo, foo + std::strlen(foo));
Run Code Online (Sandbox Code Playgroud)
如果您<algorithm>因任何原因不能使用实现您自己的swap():
template<typename T>
void swap(T &a, T &b)
{
T tmp{ a };
a = b;
b = tmp;
}
Run Code Online (Sandbox Code Playgroud)
在这个循环中
for (int i = 0 ; i <= strlen(a); i++){
reverse[i]= a[strlen(a)-i];
Run Code Online (Sandbox Code Playgroud)
您正在访问超出字符串实际字符的字符。
例如,当i等于 0 时,您将字符串中的终止零字符处理到字符串a的第一个位置reverse。
reverse[0]= a[strlen(a)-0];
Run Code Online (Sandbox Code Playgroud)
代码可以写得更简单,而不需要例如对函数的冗余调用strlen。
char a[size], reverse[size];
strcpy( a, "dlrow olleh" );
size_t i = 0;
for ( size_t n = strlen( a ); i < n; i++ )
{
reverse[i] = a[n - i - 1];
}
reverse[i] = '\0';
std::cout << reverse << '\n';
Run Code Online (Sandbox Code Playgroud)
请注意,有std::reverse_copy执行相同任务的标准算法。
下面是一个演示程序。
#include <iostream>
#include <algorithm>
#include <cstring>
int main()
{
const size_t SIZE = 20;
char a[SIZE], reverse[SIZE];
std::strcpy( a, "dlrow olleh" );
std::cout << a <<'\n';
auto it = std::reverse_copy( a, a + strlen( a ), reverse );
*it = '\0';
std::cout << reverse <<'\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出是
dlrow olleh
hello world
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |