我试图从输出中获取单词,并在其中找到带有字母Q的任何单词。如果单词确实如此,则需要将其替换为“bad”。之后,我试图将每个单词追加到output2。我这样做有困难。我编译时得到的错误是:
从'const char *'无效转换为'char'[-fpermissive]
#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;
string manipulate(string x);
int main(int argc, char* argv[])
{
string input, temp, output, output2, test, test2;
int b;
cout << "Enter a string: ";
getline(cin, input);
istringstream iss(input);
while (iss >> test)
{
if(test.length() != 3)
{
test.append(" ", 1);
output.append(test);
}
}
istringstream iss2(output);
while (iss2 >> test2)
{
for(int i = 0; i<test2.length(); i++)
{
switch(test2[i])
{
case 'q':
test2[1]="bad";
output2.append(test2);
break;
}
}
}
cout << "Your orginal string was: " << input << endl;
cout << "Your new string is: " << output2 << endl;
cin.get();
return 0;
}
答案 0 :(得分:12)
如何做到这一点要容易得多:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("Your homework is bad. Really bad.");
while (s.find("bad") != string::npos)
s.replace(s.find("bad"), 3, "good");
cout << s << endl;
return 0;
}
输出:
Your homework is good. Really good.
这是一个没有比我们需要的时间更多次调用find
的例子:
size_t index;
while ((index = s.find("bad")) != string::npos)
s.replace(index, 3, "good");
第一个更容易阅读。
答案 1 :(得分:1)
这是编译错误的原因:
test2[1]="bad";
test2[1]
类型为char
,"bad"
类型为const char*
:此分配不合法。
使用std::string::replace()
将q
更改为"bad"
:
test2.replace(i, 1, "bad");
由于您还需要替换第一次出现的'q'
(我认为这基于for
循环中的逻辑),您可以将for
循环替换为:
size_t q_idx = test2.find('q');
if (std::string::npos != q_idx)
{
test2.replace(q_idx, 1, "bad");
output2.append(test2);
}
编辑:
替换整个词:
test2 = "bad";
注意,如果output2
包含具有当前逻辑的'q'
,则output2.append(std::string::npos != test2.find('q') ? "bad" : test2);
将包含单词。这将是纠正它的一种方式:
{{1}}