以字符串作为输入,但在c++中单独处理字符

Taking string as input but dealing with characters individually in C++

本文关键字:c++ 单独 处理 字符 但在 字符串 输入      更新时间:2023-10-16

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

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

请注意时间是至关重要的因素,请提供最快的方法

是否有任何有效的方法来获取字符串作为输入,然后对其字符单独执行一些操作?

是的,有:像往常一样读取std::string(例如,使用输入流的std::getline>>操作符),然后访问循环中的单个字符。

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

ideone的第一个演示。

同样,在执行操作之后,我们可以输出新的字符串(执行操作后得到的字符串)而不是使用for循环单独输出字符吗?

可以:std::string可变的,这意味着您可以在适当的位置更改它。

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;

ideone的第二次演示

你可以这样做:

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string in;
  cout << "Input pleasen";
  cin >> in;
  if(in.size() >= 5)
    in[5] = 'A';
  cout << in << "n";
  return 0;
}

或者你可以用std::getline()代替std::cin

输出:

Input please
samaras
samarAs

但是,您确定这是程序的瓶颈吗?您可以使用一些分析工具来检查这一点,就像我使用的那样。

[编辑]

由于OP询问效率,我做了一些测试。然而,您可以考虑用户输入所花费的时间,但由于我是同一个人,我们可以假设这是恒定的。

所以,我确实从另一个答案修改了一点代码,像这样:

  std::string str;
  cout << "Input pleasen";
  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做计时,就像我在我的伪网站的代码。

基本操作…在网上搜索一下可能会对你有所帮助,但就是这样…

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