我对C语言有点生疏,我被要求写一个快速的小应用程序从STDIN中取一个字符串,并将字母'a'的每个实例替换为字母'c'。我觉得我的逻辑很明显(主要是感谢阅读本网站上的帖子,我可能会补充),但我一直都会遇到访问冲突错误。
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
printf("Enter a string:\n");
string txt;
scanf("%s", &txt);
txt.replace(txt.begin(), txt.end(), 'a', 'c');
txt.replace(txt.begin(), txt.end(), 'A', 'C');
printf("%s", txt);
return 0;
}
我真的可以使用一些见解。非常感谢你!
答案 0 :(得分:7)
scanf不知道std :: string是什么。您的C ++代码应如下所示:
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
cout << "Enter a string:" << endl;
string txt;
cin >> txt;
txt.replace(txt.begin(), txt.end(), 'a', 'c');
txt.replace(txt.begin(), txt.end(), 'A', 'C');
cout << txt;
return 0;
}
答案 1 :(得分:2)
请不要将任何半记忆的C拖入其中。这是一个可能的C ++解决方案:
#include <string>
#include <iostream>
int main()
{
for (std::string line;
std::cout << "Enter string: " &&
std::getline(std::cin, line); )
{
for (char & c : line)
{
if (c == 'a') c = 'c';
else if (c == 'A') c = 'C';
}
std::cout << "Result: " << line << "\n";
}
}
(你当然可以使用std::replace
,虽然我的循环只能通过字符串一次。)
答案 2 :(得分:0)
似乎你正在将c与c ++混合
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "Enter a string << endl;
string txt;
cin >> txt;
txt.replace(txt.begin(), txt.end(), 'a', 'c');
txt.replace(txt.begin(), txt.end(), 'A', 'C');
cout << txt << endl;
return 0; }
不要担心,将c与c ++混合是一个常见的错误,也许看enter link description here是一个好的开始