在字符串的每个元素(不使用弦乐)的每个元素之后插入字符

Inserting character after every nth element of a string (not using stringstream)

本文关键字:元素 之后 插入 字符 字符串      更新时间:2023-10-16

我编写了一个函数,可以从字符串中删除空格和破折号。然后,它在每个第三个字符后插入一个空间。我的问题是,任何人都可以建议一种不使用stringstream的方法吗?

#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
using namespace std;
string FormatString(string S) {
    /*Count spaces and dashes*/
    auto newEnd = remove_if(S.begin(), S.end(), [](char c){return c == ' ' || c == '-';});
    S.erase(newEnd, S.end());
    std::stringstream ss;
    ss << S[0];
    for (unsigned int i = 1; i < S.size(); i++) {
        if (i%3==0) {ss << ' ';}
        ss << S[i];
    }
    return ss.str();
}
int main() {
    std::string testString("AA BB--- ash   jutf-4499--5");
    std::string result = FormatString(testString);
    cout << result << endl;
    return 0;
} 

如何使用输入字符串作为输出:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string FormatString(string S) {
    auto newEnd = remove_if(S.begin(), S.end(), [](char c){return c == ' ' || c == '-';});
    S.erase(newEnd, S.end());
    auto str_sz = S.length();
    /* length + ceil(length/3) */
    auto ret_length = str_sz + 1 + ((str_sz - 1) / 3);
    S.resize(ret_length);
    unsigned int p = S.size()-1;
    S[p--] = '';
    for (unsigned int i = str_sz-1; i>0; i--) {
        S[p--] = S[i];
        if (i%3 == 0)
            S[p--] = ' ';
    }
    return S;
}
int main() {
    std::string testString("AA BB--- ash   jutf-4499--5");
    std::string result = FormatString(testString);
    cout << result << endl;
    // AAB Bas hju tf4 499 5
    return 0;
}