我想截断 cout 中的字符串,
string word = "Very long word";
int i = 1;
cout << word << " " << i;
我希望字符串的输出最多包含 8 个字母
所以就我而言,我想要
Very lon 1
代替 :
Very long word 1
我不想使用 wget(8) 函数,因为它不会将我的单词截断为我想要的大小。我也不希望“单词”字符串改变它的值(我只想向用户显示单词的一部分,但在我的变量中保持完整)
我想截断 cout 中的字符串,
string word = "Very long word";
int i = 1;
cout << word << " " << i;
我希望字符串的输出最多包含 8 个字母
所以就我而言,我想要
Very lon 1
代替 :
Very long word 1
我不想使用 wget(8) 函数,因为它不会将我的单词截断为我想要的大小。我也不希望“单词”字符串改变它的值(我只想向用户显示单词的一部分,但在我的变量中保持完整)
我知道您已经有了解决方案,但我认为这值得一提:是的,您可以简单地使用string::substr
,但使用省略号表示字符串已被截断是一种常见的做法。
如果这是你想要合并的东西,你可以做一个简单的截断函数。
#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
正如Chris Olden上面提到的, usingstring::substr
是一种截断字符串的方法。但是,如果您需要另一种方法来执行此操作,则可以简单地使用string::resize
,然后在字符串被截断的情况下添加省略号。
你可能想知道是什么string::resize
?实际上,它只是通过您的字符串调整已用内存(而不是保留的内存)的大小并删除超出新大小的任何字符,只保留字符串的第 n 个字符,其中 n 是新大小。此外,如果新的大小更大,它会扩展字符串的已用内存,但我认为这方面的扩展很简单。
当然,我不想建议一种“新的最佳方法”,它只是截断std::string
.
如果您调整Chris Olden truncate 函数,您会得到如下内容:
#include <iostream>
#include <string>
std::string& truncate(std::string& str, size_t width, bool show_ellipsis=true) {
if (str.length() > width) {
if (show_ellipsis) {
str.resize(width);
return str.append("...");
}
else {
str.resize(width);
return str;
}
}
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;
}
尽管此方法的作用基本相同,但请注意,此方法接受并返回对修改后的字符串的引用,因此请小心处理,因为代码中的外部事件可能会破坏此字符串。因此,如果您不想冒险,只需删除引用,函数就会变为:
std::string truncate(std::string str, size_t width, bool show_ellipsis=true) {
if (str.length() > width) {
if (show_ellipsis) {
str.resize(width);
return str + "...";
}
else {
str.resize(width);
return str;
}
}
return str;
}
我知道发布这个答案有点晚了。然而,它可能会为未来的访客派上用场。