我想在c ++中反转一个char字符串。 我写了这段代码:
#include <iostream>
#include <string.h>
using namespace std;
int main(){
char word[80] = "polymorphism";
char rev[80];
int i, j;
int l;
l = strlen(word);
for(i = 0, j = l; i < l-1; i++, j--){
word[j] = rev[i];
}
cout << rev << endl;
return 0;
}
在终端中,它会显示如下字符:
83???uH??? ... Something like this
答案 0 :(得分:2)
你的角色阵列转速不是零终止。
并且要写给你写的文字。:)
word[j] = rev[i];
由于条件
,循环也是错误的i < l-1;
必须有
i < l;
程序可以按以下方式查看
#include <iostream>
#include <cstring>
int main()
{
char word[80] = "polymorphism";
char rev[80];
size_t n = std::strlen( word );
size_t i = 0;
for ( ; i < n; i++ ) rev[i] = word[n - i - 1];
rev[i] = '\0';
std::cout << word << std::endl;
std::cout << rev << std::endl;
return 0;
}
程序输出
polymorphism
msihpromylop
考虑到您可以使用标头std::reverse_copy
中声明的标准算法<algorithm>
执行相同的操作。
例如
#include <iostream>
#include <cstring>
#include <algorithm>
int main()
{
char word[80] = "polymorphism";
char rev[80];
size_t n = std::strlen( word );
*std::reverse_copy( word, word + n, rev ) = '\0';
std::cout << word << std::endl;
std::cout << rev << std::endl;
return 0;
}
程序输出与上面相同
polymorphism
msihpromylop
答案 1 :(得分:0)
#include <iostream>
#include <string.h>
using namespace std;
int main(){
char word[80] = "polymorphism";
char rev[80] = {'\0'};
int i = 0;
int last = strlen(word) - 1;
while(last >= 0) {
rev[i] = word[last];
i++;
last--;
}
cout << rev << endl;
return 0;
}
答案 2 :(得分:0)
我对您的代码进行了3次更改:
更改1:由于字符串长度为l
,因此索引将来自0
t o l-1
。
更改2:rev
将存储来自word
的值,而不是相反。{
更改3:正确的字符串应\0
终止。
#include <iostream>
#include <string.h>
using namespace std;
int main(){
char word[80] = "polymorphism";
char rev[80]="";
int i, j;
int l;
l = strlen(word);
for(i = 0, j = l-1; i < l; i++, j--){ //change 1
rev[i] = word[j]; // change 2
}
rev[i]='\0'; // change 3
cout<<rev;
return 0;
}
工作ideone链接:http://ideone.com/kIqeNF