#include <iostream>
#include <string>
using namespace std;
int main ()
{
string s;
cin >> s;
for (int i = 0; i < s.size (); i++)
{
if (s[i] == 'A')
{
s[i] = "10";
}
cout << s[i];
}
return 0;
}
我收到以下错误:
main.cpp: In function
'int main()': main.cpp:10:5: error: invalid conversion from 'const char*' to 'char' [-fpermissive] s[i]= "10";
任何帮助都将受到高度赞赏。谢谢。
答案 0 :(得分:4)
您可以找到A
的位置,从索引0开始直到字符串结尾,每当您找到replace
时,使用10
使用您找到的两个位置的信息以及您希望在给定字符串中找到的字符串的长度。
如下所示:https://www.ideone.com/dYvF8d
#include <iostream>
#include <string>
int main()
{
std::string str;
std::cin >> str;
std::string findA = "A";
std::string replaceWith = "10";
size_t pos = 0;
while ((pos = str.find(findA, pos)) != std::string::npos)
{
str.replace(pos, findA.length(), replaceWith);
pos += replaceWith.length();
}
std::cout << str << std::endl;
return 0;
}
答案 1 :(得分:3)
为什么不使用string::insert
找到要替换的字符,然后operator[]
到插入 a&#34; 10&#34;?也许不是最好的方法,但可以正确完成。
您编码的问题是,std::string
的{{1}}会返回char&
,而您无法为其分配string literal
。
我认为我应该给你一个实现它的功能。
void Process(std::string& op)
{
auto pos=op.find('A');
op.erase(pos,1);
if(pos!=std::string::npos)
{
op.insert(pos,"10");
}
}
答案 2 :(得分:-1)
问题是您在单个空间中放置了2个字符,您会看到A
是char
类型的单个字符,并存储为8个字节。其中“10”被视为字符数组,其中包含3个字符1
,0
和\0
(空字符)。因此,用“10”替换“A”的方式是不可能的。
你能做的是:
if (s[i] == 'A') {
s[i] = '1';
s += '*'; // to add a single char onto the end.
for (int j = s.size(); j > i; --j)
s[j] = s[j - 1];
s[++i] = '0';
}
要打印出来,请执行以下操作:
std::cout << s;
或
std::cout << s[i] << s[i + 1];
再次通过std::cout << s[i]
输出单个字符。
编辑:
根据@RemyLebeau,您可以使用strreplace ()
if (s[i] == 'A') {
s.replace(i, 1, "10");
}
答案 3 :(得分:-2)
在这里,您要使用字符串“10”替换字符“A”,以便确定该错误。找到'A'后,你必须删除一个字符'A',然后添加两个字符“10”。 有很多方法可以做到这一点。 一个简单的方法是获取一个新的临时字符串并复制该新temo字符串中的所有字符串,直到'A'。获得'A'之后,将所需的字符添加到该temp,然后复制剩下的字符串。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s, temp;
cin >> s;
for (int i = 0, j = 0; i < s.length(); i++) {
if (s[i] == 'A') {
temp[j++] = '1';
cout << temp[j - 1];
temp[j++] = '0';
cout << temp[j - 1];
}
else {
temp[j++] = s[i];
cout << temp[j - 1];
}
}
return 0;
}