在 C++ 中反转字符串
Posted
技术标签:
【中文标题】在 C++ 中反转字符串【英文标题】:Reversing string in C++ 【发布时间】:2017-01-09 01:38:42 【问题描述】:在以下部分字符串交换代码
end = &str[len - 1];
我不理解寻址部分。当我在没有寻址部分的情况下执行此操作时,它仍会运行,但会警告我“无法将 char 类型的值分配给 char 类型的标识”。完整代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main()
char str[] = "This is a test";
char *start, *end;
int len;
int t;
cout << "Original " << str << "\n";
len = strlen(str);
start = str;
end = str[len - 1];
//this reverses the string
while (start < end)
t = *start;
*start = *end;
*end = t;
start++;
end--;
cout << "Reversed" << str << "\n";
system("PAUSE");
return 0;
【问题讨论】:
"在 C++" 中反转字符串,请不要这样。不是这样的。我尊重 C 和 C 程序员,他们的东西,应该给他们。你有一个专用的字符串类型,你有算法,你有swap
...c++ 不仅仅是cout
。对不起,抱怨,但我感到有点难过。
我正在通过教科书做例子。
我会标记它。严重地。我会认为它有害。它教你过时的东西。在适当的 c++ 程序中,您永远不会遇到这样的问题......或者它是一本 C 书?这看起来像带有 cout
的 C 代码。这就是 15-20 年前 C 程序员用来教授 c++ 的方式。至少这是我的经验。
我正在使用 Herbert Schildt 编写的 C++ 初学者指南第二版。有没有更好的书推荐给像我这样的初学者?
我确实有一个后续问题。为什么下面不需要指向地址:start = str;
【参考方案1】:
我不理解寻址部分。
给定
char str[] = "This is a test";
char *start, *end;
len = strlen(str);
那么end
是指向char的指针,并且
end = &str[len - 1]; // `end` points to the last character (before the `\0`)
您必须使用&
(地址)运算符,因为end
是指针,因此必须将其分配给某物的地址(此处为字符串最后一个字符的地址)。
当我没有寻址部分时它仍然运行
我不认为它会 - 你应该有一个编译错误
end = str[len - 1]; // invalid conversion from ‘char’ to ‘char*’
【讨论】:
我确实有一个后续问题。为什么下面不需要指向地址:start = str; @Jeff - 那是因为str
是一个字符串(不是单个字符)【参考方案2】:
你应该知道end
的类型是char*
,但是str[len-1]
的类型是char
,所以你需要把str[n-1]
的类型改成char*
,所以你需要&str[len-1]
。
但是如果你使用string
,会有一个简单的方法:
使用STL中的std::reverse方法:
std::reverse(str.begin(), str.end()); //str应该是字符串类型
您必须包含“算法”库#include。
【讨论】:
您的帖子没有解决 OP 的问题。 @RSahu OP 实际上并没有问问题。一个合理的猜测是,问题是“在 C++ 中反转字符串的明智方法是什么”。 @DavidSchwartz,他们确实做到了:我不理解寻址部分 我理解他们在尝试解决实际问题时遇到的困难——如何反转字符串。如果这是问题的话,正确的答案是不要以如此可怕的方式去做。但这突显了为什么在按下
按钮后,对某人来说真正问 question 非常重要。
我很欣赏这两个答案。我明白为什么你仍然需要它,现在明白有更好的方法来完成它。下次我会更具体,但问题已得到解答。谢谢!!!【参考方案3】:
也许这会有所帮助
void reverse (char word[])
int left = 0;
int right = strlen(word) - 1;
while (left < right)
char temp = word[left];
word[left] = word[right];
word[right] = temp;
left++;
right--;
cout << word;
我希望这能给你这个想法。
【讨论】:
以上是关于在 C++ 中反转字符串的主要内容,如果未能解决你的问题,请参考以下文章