首页 > 解决方案 > 字符串操作 像在 python 中一样重复字母

问题描述

在 pyhton 中,您可以执行以下操作

word = "e" * 5
print(word)

得到“eeeee”

但是当我在 C++ 中尝试同样的事情时,我遇到了输出不包含任何文本的问题,这是我正在尝试的代码

playerInfo.name + ('_' * (20 - sizeof(playerInfo.name)))

我很想平衡字符串的长度,所以播放器列表中的所有内容都彼此内联

提前感谢您的帮助

标签: pythonc++string

解决方案


如果您的实际问题是您希望将名称显示为特定宽度,则不要修改基础数据。相反,利用ostream的格式化功能来设置对齐和填充宽度。不应修改基础数据以迎合显示。显示功能应该能够获取基础数据并根据需要对其进行格式化。

这取自https://en.cppreference.com/w/cpp/io/manip/left,它专门描述了该功能,但显示了andstd::left的示例,它应该可以满足您的需求。您将需要使用这些功能。std::setwstd::fill#include <iomanip>

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    const char name1[] = "Yogesh";
    const char name2[] = "John";

    std::cout << "|" << std::setfill(' ') << std::setw(10) << std::left << name1 << "|\n";
    std::cout << "|" << std::setfill('*') << std::setw(10) << std::right << name2 << "|\n";
}

输出

|Yogesh    |
|******John|

关于 std::cout 和 ostreams 持久性的说明

请注意,它std::cout是一个std::ostream对象,默认情况下会在程序的生命周期内存在(或者对于足够接近生命周期的程序而言)。作为一个对象,它有成员变量。当我们调用时,std::setfill('*')我们正在设置其中一个成员变量(填充字符)并覆盖默认填充字符。当我们调用时,std::setw(10)我们正在设置流的底层宽度,直到另一个函数清除它。

std::setfill, std::left,std::right将一直存在,直到您将它们明确设置为其他值(它们不会自动返回默认值)。std::setw将持续到(来自https://en.cppreference.com/w/cpp/io/manip/setw)之一

operator<<(basic_ostream&, char) and operator<<(basic_ostream&, char*)
operator<<(basic_ostream&, basic_string&)
std::put_money (inside money_put::put())
std::quoted (when used with an output stream)

所以std::setw会一直持续到基本上下一个std::stringconst char *输出。


推荐阅读