我知道有很多像我这样的问题,但读了几个问题对我没有帮助。可能是因为我在编程方面是新手,在使用指针方面有困难。
作为练习,我尝试在c++中创建一个函数来反转输入的字符串。下面是我的函数:
char* reverse(const char* t)
{
int j, k;
char* aString = new char[100];
for(j=0, k=strlen(t)-1; j < strlen(t); j++, k--)
{
aString[j]=t[k];
}
aString[j+1]='\0';
return aString;
}但是,输入根本不会反转。我做错了什么?
发布于 2013-08-16 09:50:26
在C++中,您有一个更好、更干净、更安全、更容易和更具可读性的选项- std::string。
下面是一个返回反向std::string的函数reverse()的简单示例
void swap(string& str, int index1, int index2) {
char temp = str[index1];
str[index1] = str[index2];
str[index2] = temp;
}
string reverse(string str) {
int size = str.size();
for (int i = 0; i < size / 2; i++)
swap (str, i, size - i - 1);
return str;
}发布于 2013-08-16 10:03:37
运行良好,对样式和更好的行为进行了一些细微的修改:
#include <iostream>
#include <cstring>
char* reverse(const char* t);
int main() {
const char* mystring = "reverse me";
char* revstring = reverse(mystring);
std::cout << "Before reversing: " << mystring << std::endl
<< "After reversing: " << revstring << std::endl;
delete[] revstring;
return 0;
}
char* reverse(const char* t) {
size_t j;
int k;
char* aString = new char[100];
for(j = 0, k = std::strlen(t) - 1; j < std::strlen(t); j++, k--) {
aString[j] = t[k];
}
aString[j] = '\0';
return aString;
}正如其他人所说,作为学术练习,这很好,但如果可以避免,最好不要在C++中使用C字符串,最好将strlen()移出循环。
https://stackoverflow.com/questions/18264486
复制相似问题