无法 运行 反转字符串程序
Unable to run reverse string program
我最近开始学习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==!'[=11=]')
{
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 == !'[=10=]' ) { … }
嗯,!'[=11=]'
是 true
,整数是 1
。所以你有 while (counter == 1)
,counter
被初始化为 0
,使表达式立即 false
,所以循环永远不会执行。
您可能打算写 != '[=18=]'
。但这仍然是一个问题,因为 counter
以值 0
开始,而 0 != 0
仍然是 false
并且循环不会循环。
当您输入 Hey
作为您的字符串时,字符 H
、e
、y
和 [=27=]
将放置在 string
变量。你想找到那个 [=27=]
字符在哪里,我们看到它在 string[3]
。那你为什么要比较 counter
和 '[=32=]'
?也许你想要 string[counter]
?
当您获得 Hey
中的字符数时,即 3
,您开始反向循环将索引 3 处的 [=27=]
复制到索引 0
。 .. 所有 4 个字符的顺序相反:[=27=]
、y
、e
、H
。不幸的是,开头的 [=27=]
将标记字符串的结尾,因此字符串将显示为空..
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++ 编写问题的方式。现在与您正在尝试做的事情进行比较,我认为它不言自明。
我最近开始学习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==!'[=11=]')
{
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 == !'[=10=]' ) { … }
嗯,!'[=11=]'
是 true
,整数是 1
。所以你有 while (counter == 1)
,counter
被初始化为 0
,使表达式立即 false
,所以循环永远不会执行。
您可能打算写 != '[=18=]'
。但这仍然是一个问题,因为 counter
以值 0
开始,而 0 != 0
仍然是 false
并且循环不会循环。
当您输入 Hey
作为您的字符串时,字符 H
、e
、y
和 [=27=]
将放置在 string
变量。你想找到那个 [=27=]
字符在哪里,我们看到它在 string[3]
。那你为什么要比较 counter
和 '[=32=]'
?也许你想要 string[counter]
?
当您获得 Hey
中的字符数时,即 3
,您开始反向循环将索引 3 处的 [=27=]
复制到索引 0
。 .. 所有 4 个字符的顺序相反:[=27=]
、y
、e
、H
。不幸的是,开头的 [=27=]
将标记字符串的结尾,因此字符串将显示为空..
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++ 编写问题的方式。现在与您正在尝试做的事情进行比较,我认为它不言自明。