无法运行反向字符串程序

时间:2018-10-21 03:41:38

标签: c++ stdstring

我最近开始学习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);
}

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

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

2 个答案:

答案 0 :(得分:1)

while ( counter == !'\0' ) { … }

好吧,!'\0'true,整数是1。因此,您拥有while (counter == 1),并且counter被初始化为0,使表达式立即成为false,因此循环永远不会执行。

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

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


当您获得Hey中的字符数,即3时,就开始反向循环,将索引3的\0复制到索引0 ...所有4个字符的倒序:\0yeH。不幸的是,开头的\0将标记字符串的结尾,因此该字符串将显示为空。.

答案 1 :(得分:1)

如果您以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 ++编写问题的方式。现在,与您尝试做的事情进行比较,我认为这是不言而喻的。