首页 > 解决方案 > 无法运行反向字符串程序

问题描述

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

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

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

标签: c++stdstring

解决方案


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

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

你可能打算写!= '\0'. 但这仍然是一个问题,因为counter从 value 开始0,并且0 != 0仍然是false并且循环不循环。

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


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


推荐阅读