将字符串作为输入但在C ++中单独处理字符

时间:2014-06-08 13:44:39

标签: c++ string

我想知道是否有任何有效的方法可以将字符串作为输入,然后单独对其字符执行某些操作?

此外,在执行操作(检查字符串的长度也可能增加或减少)之后,我们可以输出新字符串(执行操作后得到的字符串)而不是使用for循环单独输出字符吗?

请注意,时间是关键因素,请提供最快的方法。

3 个答案:

答案 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;
}

First demo on ideone.

  

此外,执行操作后,我们可以输出新字符串(执行操作后得到的字符串),而不是使用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;

Second demo on ideone.

答案 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);
}