如何截断字符串[格式化]? C ++

时间:2013-10-25 04:02:00

标签: c++ string formatting truncate cout

我想在cout中截断一个字符串,

string word = "Very long word";
int i = 1;
cout << word << " " << i;

我希望字符串的输出最多为8个字母

所以在我的情况下,我想要

Very lon 1

而不是:

Very long word 1

我不想使用wget(8)函数,因为它不会将我的单词截断到我想要的大小。我也不希望'word'字符串改变它的值(我只想向用户显示单词的一部分,但在我的变量中保持它完整)

提前致谢

编辑:有人发布了解决方案,它对我有用,现在我无法将他的答案标记为好,因为他在获得投票后删除了他的答案。它就像使用word.substr(0,8)方法一样简单。他有什么理由被贬低?这种方法难以使用吗?

1 个答案:

答案 0 :(得分:1)

我知道你已经有了解决方案,但我认为这值得一提:是的,你可以简单地使用string::substr,但通常的做法是使用省略号表示字符串已被截断。< / p>

如果你想要合并,你可以只做一个简单的截断函数。

#include <iostream>
#include <string>

std::string truncate(std::string str, size_t width, bool show_ellipsis=true)
{
    if (str.length() > width)
        if (show_ellipsis)
            return str.substr(0, width) + "...";
        else
            return str.substr(0, width);
    return str;
}

int main()
{
    std::string str = "Very long string";
    int i = 1;
    std::cout << truncate(str, 8) << "\t" << i << std::endl;
    std::cout << truncate(str, 8, false) << "\t" << i << std::endl;
    return 0;
}

输出结果为:

Very lon...   1
Very lon      1