【问题标题】:C++ Best way to create a new string from index of char array?C++ 从 char 数组的索引创建新字符串的最佳方法?
【发布时间】:2016-01-24 17:04:54
【问题描述】:

我有一个类似的字符数组

char ch[] = "This is a char array";

我想创建一个从索引 n 到索引 j 的新字符串,即

string str = stringFromChar(ch, 0, 5); //str = 'This'

【问题讨论】:

  • char[] ch 这不是有效的语法。也许在 C# 中,但不是在 C++ 中

标签: c++ arrays string indexing char


【解决方案1】:

您可以使用带有两个迭代器的std::string 的构造函数。

std::string str(std::begin(ch), std::next(std::begin(ch), 5));

Working demo

在更一般的情况下,您可以将 std::next 用于开始和结束迭代器,以从数组的任意切片生成字符串。

我更喜欢在适用的情况下使用 C++ 标准库,但知道您可以使用指针算术做同样的事情。

std::string str(ch, ch+5);

【讨论】:

  • 顺便说一句,std::next(std::begin(ch), 5) 和 std::begin(ch)+ 5 有什么不同?
  • @HumamHelfawi std::nextstd::advance 处理通过可能使用或可能不使用连续内存的容器(即 std::list 等)前进。
  • 天哪,我一直在使用 + 方式,我认为我的代码可以运行在任何容器上。愚弄我!谢谢!
  • 漂亮的解决方案,+1。
【解决方案2】:

只需使用带有迭代器的构造函数(另外,char* 是一个有效的输入迭代器)

 std::string str(ch, ch + 5);

【讨论】:

    【解决方案3】:

    你可以写

    string str(ch, ch + 5); //str = 'This'
    

    这就是一般形式会是什么样子

    string str(ch + i, ch + j); //str = 'This'
    

    我在哪里

    如果第一个索引等于0那么你也可以写

    string str(ch, n );
    

    其中 n 是要在创建的对象中放置的字符数。例如

    string str( ch, 4 ); //str = 'This'
    

    或者如果第一个索引不等于0那么你也可以写

    string str( ch + i, j - i ); //str = 'This'
    

    【讨论】:

      【解决方案4】:

      您可以只使用 beginend 函数...

      #include<iostream>
      #include<string>
      
      int main() {
      
          char ch[] = "This is a char array";
          std::string str(std::begin(ch), std::end(ch));
          std::cout << str << std::endl;
      
          // system("pause");
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-21
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多