c++ - 无法运行反向字符串程序
问题描述
我最近开始学习 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);
}
调试时没有错误,但是当我运行程序时,我得到了一些意外的值并且字符串长度显示为零。你能指出我在哪里犯了错误。
这是我运行程序时得到的。
解决方案
while ( counter == !'\0' ) { … }
嗯,!'\0'
是true
,它作为一个整数是1
。所以你有while (counter == 1)
,并且counter
被初始化为0
,立即生成表达式false
,所以循环永远不会执行。
你可能打算写!= '\0'
. 但这仍然是一个问题,因为counter
从 value 开始0
,并且0 != 0
仍然是false
并且循环不循环。
当您Hey
作为字符串输入时,字符H
、e
、y
和\0
被放置在string
变量中。你想找到那个\0
字符在哪里,我们看到的是string[3]
。那你为什么要比较counter
呢'\0'
?也许你想要string[counter]
?
当您获得 中的字符数时Hey
,即3
开始反向循环,将 at 索引 3 复制\0
到 index 0
... 所有 4 个字符以相反的顺序: \0
, y
, e
, H
。不幸的是,\0
开头的 将标记字符串的结尾,因此字符串将显示为空..
推荐阅读
- multiple-inheritance - Raku 如何处理钻石问题(多重继承)?
- c# - 如何通过实体框架中数据库的一列上的多个值与其他列上的不同值获取数据?
- android - 如何解决应用程序已在 android studio 模拟器中停止(片段寻呼机适配器)
- javascript - MongoDB 按月分组
- reactjs - 如何将管理面板添加到现有 ASP.NET Core MVC 项目
- java - 在 Java 中执行非线程安全可选操作的最快方法
- spring - Maven Failsafe 集成测试类路径
- javascript - Push duplicate items into a separate array in Javascript with for loop?
- echo - KSH:处理命令时显示等待消息
- c# - C#异步取消异常