如何将" "替换为"_"?
How do I replace " " with "_"?
本文关键字:替换 更新时间:2023-10-16
我有一个输入字符串。如果字符串包含空格或长度小于15个字符,我必须用下划线("_")替换空白的空格。
这是我的代码:
#include <string>
#include <iostream>
using namespace std;
string spaces(int i){
char arr[i];
for(int j=0; j<i; j++){
arr[j]='_';
}
string space(arr);
return space;
}
int main(){
string str = "USERNAME12034";
if(str.size() < 15){
// get size of username;
int size = 15-str.size();
str = str.append(spaces(size));
}
cout << str << endl;
return 0;
}
当我编译并运行它时,输出如下:
USERNAME12034__�O�
如何去掉结尾的那些字符?
string::string(char *)
构造函数期望一个以空结尾的字符串。arr
不是以空结束的,因此构造函数从数组的末尾走出去,并继续从内存中添加随机垃圾,直到找到一个值为'0'的字节。
如果您想使用此方法用下划线填充字符串,您应该使arr
比所需的下划线数量大一个字符,并将最后一个位置设置为值' '
。
一个更好的方法是使用一个附加函数std::basic_string::append
。
可以在循环中使用std::string::push_back
来添加下划线,直到长度为15(或必须强制执行的任何限制)。
类似地,使用std::string::replace
函数将所有用户输入的空格替换为下划线。
string spaces (int i)
函数不再需要(解决了Mark列出的未终止数组的问题)。
我可以用下面的方法解决它:
string addUnderscore(string text, int size){
text = text.append(size, ' ');
for(int i = 0; i < text.length(); i++)
{
if(text[i] == ' ')
text[i] = '_';
}
return text;
}
谢谢。
这个任务可以分两步完成。首先,您应该将原始字符串中的所有空格替换为非编码。例如
std::replace( str.begin(), str.end(), ' ', '_' );
之后,你应该检查字符串的大小是否小于15如果小于,那么在字符串后面加上下划线
if ( str.size() < 15 ) str.resize( 15, '_' );
结合这两个语句,你会得到
#include <algorithm>
#include <string>
//...
std::replace( str.begin(), str.end(), ' ', '_' );
if ( str.size() < 15 ) str.resize( 15, '_' );
至于你的功能,那么它是错误的。首先,它不兼容c++。在c++中没有可变长度数组。所以你不能写
string spaces(int i){
char arr[i];
//...
}
数组arr也不是null终止。因此,调用构造函数string space(arr);
具有未定义的行为。
函数可以如下所示
void format( std::string &str )
{
std::replace( str.begin(), str.end(), ' ', '_' );
if ( str.size() < 15 ) str.resize( 15, '_' );
}
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 删除/替换C++字符串中的多字符 (ÿû)
- 将 malloc 替换为数组
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何在C++中用'\'替换''来处理转义序列?
- 替换密码:哪一个?
- 替换 C++17 中移除的绑定 1st
- 将 Boost MPL 容器替换为 C++17 功能
- C++:如何用单个命令替换复杂的迭代?
- C++ 替换字节数组中项的顺序