Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “我如何替换?”&引用;加上_&引用;?_C++_String - Fatal编程技术网

C++ “我如何替换?”&引用;加上_&引用;?

C++ “我如何替换?”&引用;加上_&引用;?,c++,string,C++,String,所以我有一个输入字符串。如果字符串包含空格或长度小于15个字符,我必须用下划线(“\ux”)替换空格 这是我的代码: #include <string> #include <iostream> using namespace std; string spaces(int i){ char arr[i]; for(int j=0; j<i; j++){ arr[j]='_'; } s

所以我有一个输入字符串。如果字符串包含空格或长度小于15个字符,我必须用下划线(“\ux”)替换空格

这是我的代码:

#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;
}
如何去掉结尾的字符?

构造函数需要一个以null结尾的字符串
arr
不是以null结尾的,因此构造函数离开数组的末尾并不断从内存中追加随机垃圾,直到找到一个值为“0”的字节


如果要使用此方法在字符串中填充下划线,则应使
arr
比所需的下划线数大一个字符,并将最后一个点设置为值
'\0'

,更好的方法是使用一个append函数

可以在循环内使用添加下划线,直到长度为15(或必须强制执行的任何限制)

类似地,使用函数将所有用户输入的空格替换为下划线。

string spaces (int i)

不再需要函数(解决非终止数组问题标记已列出)

我通过以下方法解决了这个问题:

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;
}
string add下划线(字符串文本,整数大小){
text=text.append(大小为“”);
对于(int i=0;i
然后,您应该检查字符串的大小是否小于15,如果小于15,则在字符串后面加下划线

if ( str.size() < 15 ) str.resize( 15, '_' );
另外,数组arr不是以null结尾的。构造函数的So调用
字符串空间(arr)具有未定义的行为

该函数可以如下所示

void format( std::string &str )
{
    std::replace( str.begin(), str.end(), ' ', '_' );
    if ( str.size() < 15 ) str.resize( 15, '_' );
}
void格式(std::string&str)
{
std::replace(str.begin()、str.end()、“”“);
如果(str.size()<15)str.resize(15,'.');
}

使用
std::replace
。问题的措辞很糟糕:描述是“填充到15个字符”,但标题是“用下划线替换空格”。谢谢Chris,我不知道我可以使用替换函数来替换空白。但是,如果用户名长度小于15个字符,如何附加一定数量的空格?有一个
append
重载,它包含一个字符和多少个字符。您可能还需要为OP解释“以null结尾的字符串”的确切含义。
#include <algorithm>
#include <string>

//...

std::replace( str.begin(), str.end(), ' ', '_' );
if ( str.size() < 15 ) str.resize( 15, '_' );
string spaces(int i){
        char arr[i];
        //...
}
void format( std::string &str )
{
    std::replace( str.begin(), str.end(), ' ', '_' );
    if ( str.size() < 15 ) str.resize( 15, '_' );
}