我最近开始学习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 :(得分: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
将标记字符串的结尾,因此该字符串将显示为空。.
答案 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 ++编写问题的方式。现在,与您尝试做的事情进行比较,我认为这是不言而喻的。