Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stroustrup Ex.7,第4章-C和x2B+;语法 我是C++新手,我和其他许多人一样,都是从Bjarne Stroustrup的编程中学习的——C++的原理和实践。p>_C++_Function_Ppp - Fatal编程技术网

Stroustrup Ex.7,第4章-C和x2B+;语法 我是C++新手,我和其他许多人一样,都是从Bjarne Stroustrup的编程中学习的——C++的原理和实践。p>

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

我被困在练习7,第4章,其中的想法是编写一个计算器,当输入是一个整数和/或一个字符串,后跟字符(+、-、*或/)时,输出应该宣布“输入1的和/差/积/比,输入2就是结果;因此,如果(“two3*)是输入,那么输出应该是“2*3=6”的乘积

下面是斯特劳斯塔普的解决方案(我留下斯特劳斯塔普的评论):

--没有侵犯版权,因为这都是他的网站--

等等等等等等。。。 }

我只是不明白这里发生了什么,在大背景下。我很难理解整个get_number()函数,以及它与其余代码的关系

1-为什么要将number.size()的值指定给而不是符号?这能实现什么

2-如果(cin>>val)-为什么是有条件的?val是==向量数的大小,即11,那么条件数是11吗?这有什么帮助? 它又回来了什么?本身

3-//尝试读取由数字组成的整数-这是如何实现的,为什么有用

谢谢,很抱歉问题太长了

  • 在整个函数中的
    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;i
    numbers.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";
    }