替换字符串 C++ 位置 X 中的单词

Posted

技术标签:

【中文标题】替换字符串 C++ 位置 X 中的单词【英文标题】:Replacing word in position X of a string C++ 【发布时间】:2018-10-02 03:07:16 【问题描述】:

我正在尝试在程序中编写一个函数,该函数将接受一个字符串、一个单词和一个整数,并将 int 用作索引值,将单词用作替换值。例如,如果字符串是“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;
 

【问题讨论】:

到底是什么问题?提供问题描述。 欢迎来到***。请考虑重新表述您的问题,因为您想要的内容不清楚,并且不允许会员正确地帮助您。 如果,例如,字符串“stringcopy1”是“Like like apples”,字符串“Word”是“oranges”,int“Number”是 3,我需要“stringFunctionValue”来识别字符串中的第三个单词并将其替换为橙子。结果将是“我喜欢橙子”。它本质上需要识别字符串中“int number”空间中的单词,然后将该单词替换为给定的“word”值。 到目前为止你已经尝试过什么来实现它?你的 stringFunctionValue() 函数是空的。 显示您尝试过的内容。你可能会稍微有点偏离。 【参考方案1】:

您要做的第一件事是找到第 n 个单词。

首先想到的是使用std::istringstream 将字符串分开,&gt;&gt;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

【讨论】:

非常感谢!我确实想尝试更多地手动操作,但现在这个解决方案效果很好。感谢您花时间做出回应。

以上是关于替换字符串 C++ 位置 X 中的单词的主要内容,如果未能解决你的问题,请参考以下文章

strtok 并替换 C++ 中的子字符串

c#用许多“x”替换字符串[重复]

替换出现在两个特定单词之间的一组字符串的所有出现

字符串中的字符替换

替换多个字符串中的多个单词

随机替换字符串中的单词