【问题标题】:Unable to run reverse string program无法运行反向字符串程序
【发布时间】:2018-10-21 03:41:37
【问题描述】:

我最近开始学习 C++,并写了几行代码来接受一个字符串,显示其中的字符数,并显示输入字符串的反转。这是我写的。

#include <iostream>

int main()

{
  char string[25],rev_string[25];
  int counter=0,length=0;

  std::cout << "\n Enter the string : ";
  std::cin >> string;

  while(counter==!'\0')
  {
    counter=counter+1;
    length=length+1;
  }
  counter=0;

  std::cout << "The string has "<<length<<" characters in it.";
  while(length>=0)
  {
    rev_string[counter]=string[length];
    counter=counter+1;
    length=length-1;
  }

  std::cout << "\n The reverse of the given string is : "<<rev_string;

  return(0);
}

调试时没有错误,但是当我运行程序时,我得到了一些意外的值并且字符串长度显示为零。你能指出我在哪里做错了吗?

这是我运行程序时得到的。

【问题讨论】:

  • ==!'\0' 不是你想要的。试试!='\0'。也许不是柜台?
  • 在c++中你应该使用std::string而不是char[]
  • 另见std::reverse。如果您不能使用std::reverse,那么我希望在某处看到std::swap。当然,你还有How do you reverse a string in place in C or C++?、How to reverse an std::string? 和朋友。
  • 如果没有 std::reverse,您将需要从指向开始和结束字符的指针开始,然后交换 while (end &gt; start)(不要交换整个字符串,否则您最终会反转字符串两次并最终回到你开始的地方)

标签: c++ stdstring


【解决方案1】:
while ( counter == !'\0' ) { … }

嗯,!'\0' 是 true,作为整数是 1。所以你有while (counter == 1),并且counter被初始化为0,使表达式立即false,所以循环永远不会执行。

您可能打算写!= '\0'。但这仍然是个问题,因为counter 以0 的值开始,而0 != 0 仍然是false,并且循环不会循环。

当您输入Hey 作为字符串时,字符H、e、y 和\0 将放置在string 变量中。你想找到\0 字符在哪里,我们看到的是string[3]。那你为什么要比较counter 和'\0'?也许你想要string[counter]?


当您获得Hey 中的字符数时,即3,您开始反向循环,将索引3 处的\0 复制到索引0...所有4 个字符以相反的顺序: \0、y、e、H。不幸的是,开头的\0 会标记字符串的结尾,所以字符串会显示为空..

【讨论】:

  • 我以某种方式让程序通过将while(counter==!'\0') 更改为while(string[counter]!='\0') 来显示其中有多少个字符。但我仍然无法让程序显示反向字符串。它现在只是显示空白。
  • 我添加了一行length=length-1;,以防止它复制\0。程序这次显示的是反向字符串,但是后面跟着一些随机字符,每次运行程序都不一样。
  • 也许您还需要在某处复制\0?
  • 在循环之后添加了rev_string[counter]='\0';,现在它可以正常工作了。谢谢!
【解决方案2】:

如果您将 C++ 作为 C 来学习,则很难学习它。而且您还会养成一些丑陋的习惯。请学习和练习 C++。

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
    std::string s;
    std::cin >> s;

    std::cout << "number of characters: " << s.size() << std::endl;

    std::reverse(s.begin(), s.end());
    std::cout << "reverse string: " << s << std::endl;
}

这就是您在 C++ 中编写问题的方式。现在与您正在尝试做的事情进行比较,我认为它不言自明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2021-05-19
    相关资源
    最近更新 更多