Stroustrup Ex.7,第4章-C和x2B+;语法 我是C++新手,我和其他许多人一样,都是从Bjarne Stroustrup的编程中学习的——C++的原理和实践。p>
我被困在练习7,第4章,其中的想法是编写一个计算器,当输入是一个整数和/或一个字符串,后跟字符(+、-、*或/)时,输出应该宣布“输入1的和/差/积/比,输入2就是结果;因此,如果(“two”3*)是输入,那么输出应该是“2*3=6”的乘积 下面是斯特劳斯塔普的解决方案(我留下斯特劳斯塔普的评论): --没有侵犯版权,因为这都是他的网站-- 等等等等等等。。。 } 我只是不明白这里发生了什么,在大背景下。我很难理解整个get_number()函数,以及它与其余代码的关系 1-为什么要将number.size()的值指定给而不是符号?这能实现什么 2-如果(cin>>val)-为什么是有条件的?val是==向量数的大小,即11,那么条件数是11吗?这有什么帮助? 它又回来了什么?本身 3-//尝试读取由数字组成的整数-这是如何实现的,为什么有用 谢谢,很抱歉问题太长了Stroustrup Ex.7,第4章-C和x2B+;语法 我是C++新手,我和其他许多人一样,都是从Bjarne Stroustrup的编程中学习的——C++的原理和实践。p>,c++,function,ppp,C++,Function,Ppp,我被困在练习7,第4章,其中的想法是编写一个计算器,当输入是一个整数和/或一个字符串,后跟字符(+、-、*或/)时,输出应该宣布“输入1的和/差/积/比,输入2就是结果;因此,如果(“two”3*)是输入,那么输出应该是“2*3=6”的乘积 下面是斯特劳斯塔普的解决方案(我留下斯特劳斯塔普的评论): --没有侵犯版权,因为这都是他的网站-- 等等等等等等。。。 } 我只是不明白这里发生了什么,在大背景下。我很难理解整个get_number()函数,以及它与其余代码的关系 1-为什么要将numbe
for
中get_number()
i
从0变为小于numbers.size()
的一个,并将i
中不包含数字的输入字符串与numbers
向量中的一个字符串相比放入val
(所以您可以将数字的名称转换为数字的值). 然后检查val
是否与向量numbers
的大小相同,因为如果相同,则不存在匹配(有人输入的单词不是您可以处理的任何数字的名称)cin>>val
(cin从变量val的输入读取)将返回false,如果您至少输入了一个字母for
中get_number()
i
从0变为小于numbers.size()
的一个,并将i
中不包含数字的输入字符串与numbers
向量中的一个字符串相比放入val
(所以您可以将数字的名称转换为数字的值). 然后检查val
是否与向量numbers
的大小相同,因为如果相同,则不存在匹配(有人输入的单词不是您可以处理的任何数字的名称)cin>>val
(cin从变量val的输入读取)将返回false,如果您至少输入了一个字母很抱歉拿走了你的答案,伙计,但我自己想出来了,事情要简单得多(也聪明得多) for循环正常工作,将输入字符串与向量内的字符串进行比较,并返回相应的索引号 但是,将numbers.size()的值赋给not_a_符号,给val一个numbers.size()的值的原因在于,如果第一个if失败,并且只有到那时,第二个才会变为true,因为val已经初始化。这就是为什么有两个分开的IF语句,而不是IF-ELSE:ELSE不会使先前初始化的val计数,因为字符串“s”的输入将接管,从而阻止val的初始值在ELSE中工作(val=not_a_符号) 忘记功能,将其全部放在main中:
int main() {
vector<string> numbers{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
int not = numbers.size();
int val = numbers.size(); //val is initialized
string s;
cin >> s;
for (int i = 0; i<numbers.size(); ++i)
if (numbers[i] == s) val = i; // first IF; if this condition is not met, it will return val as it was initialized (val=numbers.size() or 11)
if (val == not) val = 88; // then this condition will be checked. It will be true. It will return val = 88 (a random number);
cout << "val is: " << val << "\n" << "not is: " << not << "\n";
}
intmain(){
向量数{“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
int not=numbers.size();
int val=numbers.size();//val已初始化
字符串s;
cin>>s;
对于(inti=0;我很抱歉拿走了你的答案,伙计,但是我自己弄明白了,事情要简单得多(也聪明得多)
for循环正常工作,将输入字符串与向量内的字符串进行比较,并返回相应的索引号
但是将numbers.size()的值赋给not_a_符号的原因是,将numbers.size()的值赋给val存在于这样一个事实中:如果第一个if失败,并且只有在那时,第二个才会变为true,因为val已经初始化。这就是为什么有两个分开的if语句,而不是if-ELSE:ELSE不会使先前初始化的val计数,因为字符串“s”的输入将接管,阻止val的初始值在ELSE中使用(val=非a_符号)
忘记功能,将其全部放在main中:
int main() {
vector<string> numbers{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
int not = numbers.size();
int val = numbers.size(); //val is initialized
string s;
cin >> s;
for (int i = 0; i<numbers.size(); ++i)
if (numbers[i] == s) val = i; // first IF; if this condition is not met, it will return val as it was initialized (val=numbers.size() or 11)
if (val == not) val = 88; // then this condition will be checked. It will be true. It will return val = 88 (a random number);
cout << "val is: " << val << "\n" << "not is: " << not << "\n";
}
intmain(){
向量数{“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
int not=numbers.size();
int val=numbers.size();//val已初始化
字符串s;
cin>>s;
for(int i=0;inumbers.size()
比最后一个数字多一个,因为索引从0开始。仅此而已-不是向量中的一个数字。但是向量有字符串,有11个元素(0到10个)和函数数。size()返回向量中的元素数。我不知道您的意思。for如果(cin>>val)
,条件是std::cin.operator bool()
的返回值。长话短说,流式操作符(operators
,在流上使用)返回左参数(例如cin>>
int main() {
vector<string> numbers{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
int not = numbers.size();
int val = numbers.size(); //val is initialized
string s;
cin >> s;
for (int i = 0; i<numbers.size(); ++i)
if (numbers[i] == s) val = i; // first IF; if this condition is not met, it will return val as it was initialized (val=numbers.size() or 11)
if (val == not) val = 88; // then this condition will be checked. It will be true. It will return val = 88 (a random number);
cout << "val is: " << val << "\n" << "not is: " << not << "\n";
}