将字符插入字符串

时间:2018-11-09 22:13:13

标签: c++ string insert character

我需要在每个字符实例的字符串中插入一个字符。例如,如果我的字符串是“ This is a test”,而我的字符是“ s”,那么我的输出将看起来像这样:“ Thiss iss tesst”

知道为什么这行不通吗?到目前为止,这就是我所拥有的。我不应该添加任何额外的预处理器指令或任何内容,而只是使用这里需要的内容来解决这个问题。

import matplotlib
matplotlib.use("Agg")

更新:

这是我制定的解决方案。

#include <iostream>
#include <string>
using namespace std;

int main(){

    string userString;
    char userChar;

    cin >> userString;
    cin >> userChar;

    for (int i = 0; i < userString.size(); i++){
        if(userString.at(i) == userChar){
            userString.insert(userString.begin() + i, userChar);
        }
    }
    cout << userString;

    return 0;

2 个答案:

答案 0 :(得分:0)

我不知道为什么要向后遍历字符串。无论如何。您的问题是,一旦在某个位置插入一个字符,循环将在下一次迭代中再次遇到插入的字符,然后再插入另一个。无限广告。

#include <cstddef>  // std::size_t, the correct type for indexes and sizes of objects in mem
#include <string>
#include <iostream>

int main()
{
    std::cout << "Enter a string: ";
    std::string userString;               // define variables as close
    std::getline(std::cin, userString);

    std::cout << "Enter a character: ";
    char userChar;                        // to where they're used as possible
    std::cin >> userChar;

    for (std::size_t i{}; i < userString.size(); ++i) {
        if (userString[i] == userChar) {  // no need to use std::string::at() 1)
            userString.insert(userString.begin() + i, userChar);
            ++i;  // advance the index to not read the same character again.
        }
    }

    std::cout << userString << '\n';
}

1),因为已经可以确定索引将在有效范围内。

答案 1 :(得分:0)

如果您找到了所选字符中的一个,则您的第一个解决方案可能最终会无限循环,因为您总是在前面插入一个副本,然后一直查找相同的字符。

std :: basic_string具有查找功能。使用库提供的代码总是比自制代码更好。这是我建议的解决方案:

std::string& duplicate_char(std::string& str, char val)
{
    using std::string;

    auto pos  = str.find(val); // finds first index of character val or npos if unsuccessful
    while (pos != string::npos)
    {
        str.insert(pos, 1, val); // insert at pos one character val
        pos = str.find(val, pos + 2); // find the next occurence of val starting after the newly inserted character
    }

    return str;
}

您可以这样使用此功能:

int main()
{
    std::string testStr{"Thiss iss a tesst"};
    duplicate_char(testStr, 's');

    std::cout << testStr << std::endl;
}