我需要在每个字符实例的字符串中插入一个字符。例如,如果我的字符串是“ 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;
答案 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;
}