所以我想在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 ;
我必须注意cout << reverse [i];在for循环内一切都很好,但是当我想将它打印为字符串时,我不能理解我错过了什么。cout << reverse [i];
在此循环中
for (int i = 0 ; i <= strlen(a); i++){
reverse[i]= a[strlen(a)-i];
您正在访问的字符超出了字符串的实际字符。
例如,当i
等于0时,您要将字符串a
的终止零字符压缩到字符串reverse
的第一位置。
reverse[0]= a[strlen(a)-0];
无需例如冗余调用功能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';
请注意,存在执行相同任务的标准算法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;
}
程序输出为
dlrow olleh
hello world
我在做什么错?
您正在使用char
的数组和C标准库的函数来在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";
}
反转字符串时复制的第一个实际上是空终止符,因此当您将其打印到控制台时,它不会显示,因为空终止符是数组中的第一个终止符,所以您想这样做。
int size = 12;
char a[12], reverse[12];
strcpy(a, "dlow olleh ");
for (int i = 0; i < strlen(a); i++) {
reverse[i] = a[strlen(a) - (i+1)];
}
reverse[11] = '\0';
cout << reverse;