c++中的空字段和不存在的字段

empty fields and nonexistent fields in C++

本文关键字:字段 不存在 c++      更新时间:2023-10-16

我正在阅读《c++编程原理与实践》第2版,第23章中有一个关于字段的理论问题

  • 空字段和不存在字段的区别是什么?
  • 我能在书中找到的最好的东西是关于什么是场的信息。用我的话来说,它是格式化整数值以控制它们在输出上的显示方式的方法。例如,setw()机械手可以用来改变数字在输出上的显示方式。

    我在谷歌上也找不到任何东西,所以如果有人能给我一些快速简短的评论,那就帮我大忙了。

    或者我应该问

    什么是空字段,什么是不存在的字段?

    编辑:我正在阅读的章节被称为"文本操作",Bjarne在这里引入正则表达式来读取表(4列和许多行),以查看表中的所有信息是否与模式

    匹配

    这是另一个论坛的答案,一个好人为我回答:)

    #include <iostream>
    #include <string>
    #include <regex>
    void display_field( const std::string& text, const std::string& name )
    {
        // the field that we are interested in is the marked subexpression ([[:alnum:]]*)
        // ie. zero or more alphanumeric characters immediately after 'name='
        const std::regex regex( name + '=' + "([[:alnum:]]*)" ) ;
        std::smatch match_results ;
        std::regex_search( text, match_results, regex ) ;
        std::cout << "'" << name << "' == " ;
        if( match_results.empty() ) std::cout << "  --- (nonexistent field)nn" ;
        else if( match_results[1].length() == 0 ) std::cout << "''  --- (empty field)nn" ;
        else std::cout << "'" << match_results[1] << "'  --- (non-empty field)nn" ;
    }
    int main()
    {
        const std::string text = "name=etrusks email= posts=168 phone= " ;
        for( std::string fn : { "name", "email", "posts", "age", "phone", "address" } )
            display_field( text, fn ) ;
    }
    

    这是一个很好的答案,所以很高兴:)

    输出:

    'name' == 'etrusks'——(非空字段)
    'email' == "——(空字段)
    'posts' == '168'——(非空字段)
    'age' ==——(不存在字段)
    'phone' == "——(空字段)
    'address' ==——(不存在字段)