我编写了一个程序来反转字符串,其中字符串是一个字符数组。该计划是:
#include<iostream>
void rev(char *str)
{
char *end;
end = str;// end will now point to the same address of str
// now we need to incremet the end pointer upto it encounter null
if(str)// this checks if the string is present or not
{
while(*end)
++end;
--end;// set one character back, since last character is null
// swap characters from start of string with the end of the string
// until the pointers meet in middle.
while(str < end)
{
char temp = *str;
*str++ = *end;
*end-- = temp;
}
}
std::cout<<"\n The reversed string is : \n";
std::cout<<str<<std::endl;
}
int main()
{
char str[500];
std::cout<<"\n Enter the string : ";
std::cin.getline(str, sizeof(str));
rev(str);
return 0;
}
一个输出实例是:
Enter the string : asdfgh
The reversed string is :
dsa
我想在现场解决这个问题并使用字符数组。
互联网上有许多解决方案。我见过他们。但是我想知道这个实现在哪里出错了。如果str中有一些额外的增量。我想知道如何纠正它。
答案 0 :(得分:5)
我认为你让问题太混乱了。
void reverse(char* s) {
// return if s is nullptr
if(!s) return;
size_t len = strlen(s);
// swap ith from front with ith from back
for(size_t i = 0; i < len/2; ++i) {
char temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;
}
}
答案 1 :(得分:4)
好吧,错误是你继续增加str
指针,然后减少end
指针,最终遇到字符串中间的某个地方。然后,你打印出从中间以相反顺序从某处开始的字符串。所以,我建议如下:
#include<iostream>
void rev(char *str) {
char *end;
end = str;
if(str) {
while(*end)
++end;
--end;
while(str < end) {
char temp = *str;
*str++ = *end;
*end-- = temp;
}
}
/* Don't print the string here itself */
}
int main() {
char str[500];
std::cout<<"\n Enter the string : ";
std::cin.getline(str, sizeof(str));
rev(str);
/* Print your string here */
std::cout<<"\n The reversed string is : \n";
std::cout<<str<<std::endl;
return 0;
}
<强>输出:强>
Enter the string : qwertyuiop
The reversed string is :
poiuytrewq
答案 2 :(得分:3)
好吧,因为这是标记的c ++,你应该注意到你可以这样做
void rev(char* str)
{
std::reverse(str, str + strlen(str));
}
查看documentation for std::reverse
,您可以推断出它已经到位。
答案 3 :(得分:0)
试试这个:
#include<bits/stdc++.h>
int main()
{
char str[500], revstr[500];
int i,j,len;
std::cout<<"\n Enter the string : ";
std::cin.getline(str, sizeof(str));
//reverse str
len = strlen(str);
for(i=len-1, j=0; i>=0; i--, j++){
revstr[j]=len[i];
}
revstr[j] = '\0'; //marks end of string
std::cout<<"\n The reversed string is : \n";
std::cout<<revstr<<std::endl;
return 0;
}