代码之家  ›  专栏  ›  技术社区  ›  AdyAdy

在打印字符时指定最大字符为:

  •  4
  • AdyAdy  · 技术社区  · 7 年前

    假设我有一个常量字符*想用std::cout打印,但我只想打印前X个字符。有没有办法告诉std::cout?(不在字符串中插入终止null或生成临时副本。)

    3 回复  |  直到 7 年前
        1
  •  5
  •   BluesSolo    7 年前

    C++ 17介绍 string_view

    #include <string_view>
    #include <iostream> 
    
    char message[] = { "my long char message" };
    int length = some_number; 
    
    int main() { 
          string_view str(message); 
          std::cout << str.substr(0, length) << std::endl; 
    }
    

    我没有试过编译上面的代码。 字符串视图 基本上是一个字符串,只是它不“拥有”其内容(使用后不会删除内部指针)。

        2
  •  0
  •   Antua    7 年前

    我不知道这样的功能 std::cout ,但您可能想在 printf() ,请参见示例 here .

    例如:

    printf ("The 8 chars: %*.*s\n", min, max, "String that you want to limit");
    
        3
  •  -3
  •   Benjamin Barrois    7 年前

    如果要与任何标准兼容,可以制作一个简单的宏:

    #define CROPPED_STRING(str, len) ( (str.size() <= len) ? (str) : (str.substr(0, len)) )
    

    用这种方式:

    std::cout << CROPPED_STRING("Hello World", 7) << std::cout;
    

    显示 Hello W .

    也可以在 len 以确保它是>0。