无法运行反向字符串程序 我最近开始学习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); } #包括 int main() { 字符字符串[25],rev_字符串[25]; int计数器=0,长度=0; std::cout>string; 而(计数器==!'\0') { 计数器=计数器+1; 长度=长度+1; } 计数器=0; 标准::cout
好的,无法运行反向字符串程序 我最近开始学习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); } #包括 int main() { 字符字符串[25],rev_字符串[25]; int计数器=0,长度=0; std::cout>string; 而(计数器==!'\0') { 计数器=计数器+1; 长度=长度+1; } 计数器=0; 标准::cout,c++,stdstring,C++,Stdstring,好的,!“\0”是真的,作为一个整数,它是1。所以你有while(counter==1),并且计数器被初始化为0,使得表达式立即假,所以循环永远不会执行 您可能打算写入!='\0'。但这仍然是一个问题,因为计数器以值0开始,并且0!=0仍然是false,循环不循环 当您输入Hey作为字符串时,字符H、e、y和\0被放置在字符串变量中。您希望找到\0字符所在的位置,我们在字符串[3]中看到了这些字符。那么为什么要将计数器与'\0'进行比较呢?也许您想要字符串[计数器] 当您获得Hey中的字符数时
!“\0”
是真的
,作为一个整数,它是1
。所以你有while(counter==1)
,并且计数器
被初始化为0
,使得表达式立即假,所以循环永远不会执行
您可能打算写入!='\0'
。但这仍然是一个问题,因为计数器
以值0
开始,并且0!=0
仍然是false
,循环不循环
当您输入Hey
作为字符串时,字符H
、e
、y
和\0
被放置在字符串
变量中。您希望找到\0
字符所在的位置,我们在字符串[3]中看到了这些字符
。那么为什么要将计数器
与'\0'
进行比较呢?也许您想要字符串[计数器]
当您获得Hey
中的字符数时,即3
,您开始反向循环,将索引3处的\0
复制到索引0
…所有4个字符按相反顺序:\0
,y
,e
,H
。不幸的是,开始处的\0
将标记字符串的结尾,所以字符串将空。 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;
}
#包括
#包括
#包括
int main()
{
std::字符串s;
标准:cin>>s;
STD::CUD<代码>=!!' 0 ' < /C>不是你想要的。试试<代码>!=“0”< /代码>,也许除了计数器之外的东西,C++中你应该使用<代码> STD::String < /C> >代替 char []
另请参见。如果您不能使用std::reverse
,那么我希望在某处看到std::swap
。当然,您有,还有朋友。如果没有std::reverse,您将希望以指向开始和结束字符的指针开始,然后在(结束>开始)时交换
(不要交换整个字符串,否则你会将字符串反转两次,然后正好返回到开始的位置)我不知何故通过将while(counter==!'\0')
更改为while(string[counter]!='\0'),让程序显示其中有多少个字符
。但我仍然无法让程序显示反向字符串。它现在只是显示为空。我添加了一行length=length-1;
,以防止它复制\0
。这次程序显示反向字符串,但后面跟着一些随机字符,每次我运行程序时这些字符都不一样。也许您我需要将\0
复制到某个地方?在循环后添加了rev_string[counter]='\0';
,现在它工作正常。谢谢!
#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;
}