我正在尝试在程序中编写一个函数,该函数将使用字符串,单词和整数,并使用int作为索引值,并使用word作为替换值。例如,如果字符串是“ This is a test。”,单词是“ example”,数字是4,则结果将是“ This is an example”。到目前为止,这就是我所要做的(我必须制作字符串的多个副本,因为最终,我将通过引用而不是将其作为值传递给其他两个函数)现在它正在使用字符索引而不是单词索引才能替换。我该如何解决?
#include "pch.h"
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
string Input = "";
string Word = "";
int Number = 0;
cout << "Pleas enter a string using only lower case letters. \n";
getline(cin, Input);
cout << "Please enter a word using only lower case lettersS. \n";
getline(cin, Word);
cout << "Please enter a number. \n";
cin >> Number;
string StringCopy1 = Input;
string StringCopy2 = Input;
string StringCopy3 = Input;
}
void stringFunctionValue(string StringCopy1, int Number, string Word)
{
StringCopy1.replace(Number, Word.length, Word);
return StringCopy1;
}
答案 0 :(得分:0)
您要做的第一件事是找到第n个字。
首先想到的是使用std::istringstream
用>>
将字符串分开,并用std::ostringstream
编写新字符串。
std::istringstream in(StringCopy1);
std::string token;
std::ostringstream out;
int count = 0;
while (in >> token) // while we can get more tokens
{
if (++count != number) // not the number of the token to replace
{
out << token << " "; // write the token
}
else
{
out << word << " "; // write the replacement word
}
}
return out.str();
尽管这很容易编写,但存在两个问题:它丢失了string
中正确的空格类型,并在字符串的末尾放置了额外的空格。与在原地修改字符串相比,它还很慢,并且使用的内存更多。
使用std::string::find_first_not_of
查找第一个非空白字符。这将是第一个单词的开头。然后使用std::string::find_first_of
查找下一个空格字符。这将是单词的结尾。来回交替查找非空格,然后查找空格,直到找到第n个单词的开头和结尾。 std::string::replace
这个词。这种方法需要您编写越来越复杂的代码,但是令人满意。这就是为什么我概述它而不是完全实现它的原因:为了让您自己感到高兴。
注意:void stringFunctionValue(string StringCopy1, int Number, string Word)
无法让您将结果提供给用户。这导致无用的功能。考虑返回string
而不是void
。