我想知道是否有任何有效的方法可以将字符串作为输入,然后单独对其字符执行某些操作?
此外,在执行操作(检查字符串的长度也可能增加或减少)之后,我们可以输出新字符串(执行操作后得到的字符串)而不是使用for循环单独输出字符吗?
请注意,时间是关键因素,请提供最快的方法。
答案 0 :(得分:1)
是否有任何有效的方法可以将字符串作为输入,然后分别对其字符执行某些操作?
是的,有:像往常一样阅读std::string
(例如,使用std::getline
或输入流的>>
运算符),然后在循环中访问各个字符。< / p>
std::string str;
std::getline(std::cin, str);
for (int i = 0 ; i != str.size() ; i++) {
std::cout << "Code of character " << i << " is " << (int)str[i] << std::endl;
}
此外,执行操作后,我们可以输出新字符串(执行操作后得到的字符串),而不是使用for循环单独输出字符吗?
是的,您可以:std::string
mutable ,这意味着您可以在适当的位置更改它。
std::string str;
std::getline(std::cin, str);
for (int i = 0 ; i != str.size() ; i++) {
if (!std::isalpha(str[i])) {
str[i] = '#';
}
}
std::cout << str << std::endl;
答案 1 :(得分:1)
你可以这样做:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string in;
cout << "Input please\n";
cin >> in;
if(in.size() >= 5)
in[5] = 'A';
cout << in << "\n";
return 0;
}
或者您可以使用std::getline()
代替std::cin
。
输出:
Input please
samaras
samarAs
但是,您确定这是您的计划的瓶颈吗?您可以使用一些分析工具来检查这一点,例如我使用的one。
[编辑]
由于OP询问效率,我做了一些测试。但是,您可以考虑用户输入输入的时间,但由于我是同一个人,我们可以假设这是不变的。
所以,我确实从另一个答案中修改了一些代码,如下所示:
std::string str;
cout << "Input please\n";
std::getline(std::cin, str);
if (str.size() >= 5) {
str[5] = '#';
}
std::cout << str << "\n";
输出:
Input please
Samaras
Samar#s
It took me 1.04237 seconds.
用我的代码,我得到了
Input please
Samaras
SamarAs
It took me 0.911217 seconds.
这实际上表明他们非常接近,我会说差异是由于我的打字速度。
我使用std::chrono
进行了计时,就像我在伪网站中的code一样。
答案 2 :(得分:0)
基本操作......在互联网上进行一些搜索可能对你有所帮助,但在这里你去...
std::string processStr(const std::string &str)
{
for (std::string::iterator it = str.begin(); it != str.end(); ++it)
// process your string (getting a char is done by dereferencing the iterator
// like this: *it
return (str);
}