视觉C++:字符串格式
visual C++: String formatting
这是我的输入字符串: 穆罕默德·阿里 65445519 76 蝴蝶123
这是我想要的输出: 穆罕默德·阿里 xxx-xx-xxx 76 xx
注意:除了社会安全号码(65445519)之外,所有内容的长度都可以变化,即姓名,用户ID(76)和密码(蝴蝶123)。
例:
科比·布莱恩特 34567890 548 56曼巴
我已经尝试了一下,但我有一个长度为 2 的固定用户 ID。任何人都可以想出一个用户ID也可以变化的解决方案吗?还是全新的不同方法?我不想使用字符串流,其中您可以逐个获取输入,然后分别处理字符串。然而,一个有效和短的字符串流解决方案将不胜感激。谢谢。
string s;
int j;
getline(cin,s);
for (int i=0; i<s.length(); i++)
{
if(s.at(i)=='0' || s.at(i)=='1' || s.at(i)=='2'
|| s.at(i)=='3' || s.at(i)=='4' || s.at(i)=='5'
|| s.at(i)=='6' || s.at(i)=='7' || s.at(i)=='8'
|| s.at(i)=='9')
{
s.replace(i,8,"xxxxxxxx");
s.insert(i+3,"-");
s.insert(i+6,"-");
j=i+14;
break;
}
}
for(j;j<s.length();j++)
{
s.replace(j,1,"x");
}
cout<<s<<endl;
为什么不创建一个带有名称,ID,密码的新类... 并覆盖">>"运算符?
要创建"xxxx",请使用字符串构造函数:
string word(oldword.size(), 'x');
oldword.size() 是单词的长度,而 'x' 是将填充整个字符串的字符
你真的不必使用 getline(cin,s);
,你可以将数据读入单独的变量:
std::string name, surname, password;
unsigned long long security, ID;
std::cin >> name >> surname >> security >> ID >> password;
std::string processed_security, processed_pwd(password.size(), 'x');
while (security) processed_security += "x", security /= 10;
std::cout << name << surname << processed_security << ID << processed_pwd << std::endl;
关于此代码的一些说明:
- 您可以使用较小的无符号整数数据类型作为 ID(例如
unsigned int
) -
security
应该保存在可以容纳非常大数字的数据类型中,例如unsigned long long
- 所用
std::string
构造函数的文档
是的,您应该尝试不同的方法。
考虑以下输入
Sam123456789 FarkenParker 221778833 46 foobar
您的方法最终会将"123456789"替换为X-s,这显然是错误的。
正确的方法:
1)将单个字符串拆分为空格分隔的单词。使用std::array<std::string, 4>
或std::vector<std::string>
,任何适合你的东西。
)只需相应地替换第2和第5个单词。
3)然后将所有内容组合回一个字符串。
相关文章:
- 是否可以从格式字符串中检索"width"
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 从用户定义的类生成格式字符串?
- 如何连接格式字符串?
- 如何在C++中将"%Y%m%d"格式字符串转换为time_t变量?
- CPPCHECK C++成员函数上的格式字符串
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- '|' scanf 格式字符串是什么意思
- 如何使用 msgfmt 验证格式字符串中的位置表示法占位符
- sscanf_s:格式字符串"%d"需要类型为"int *"的参数,但可变参数 4 的类型为"WORD *"
- C4477: 'fprintf' :格式字符串 '%s' 需要类型为"char *"的参数,但可变参数 1 的类型为"int *"
- 如何使用OpenSSL API从其PEM格式字符串中读取RSA公钥
- C 格式字符串宏
- C++等效于 C 的格式字符串
- 如何使用 C++ 中的 rapidjson 库从 json 格式字符串中获取值
- _vsnprintf和_vsnprintf_s的格式字符串中的可用百分比字符
- 如何将格式字符串发送到iostream
- 跨平台格式字符串
- 使用 swprintf() 打印"0x0"的格式字符串应该是什么?