【问题标题】:How to find the number of escape sequences in any string?如何在任何字符串中找到转义序列的数量?
【发布时间】:2021-04-19 12:05:09
【问题描述】:

问题:找出任何字符串中出现的“\n”(换行符)的数量。

输入:String s = "Shroud 是\n 视频游戏社区中的神一样的玩家。"

输出:2

这是我的代码:

    #include<bits/stdc++.h>
using namespace std;
int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(NULL);
   int nseq=0;
   string s;
   cin>>s;
   for(int i=0;i<s.length()-1;i++)
   {
       if(s.substr(i,i+1)=="\n")
       {
           nseq++;
       }
   }
   cout<<nseq<<endl;
}

【问题讨论】:

  • 你需要找到换行符还是特别是\n这两个字符?
  • @largest_prime_is_463035818 是的,我需要找到换行符。
  • 此外,转义序列只出现在程序中。编译后的字符串包含实际的换行符,而不是转义序列
  • 请注意,if (s[i] == '\') 不是有效的 C++。反斜杠开始一个转义序列,它将转义下面的单引号,所以你的文字缺少它的结束引号。
  • @shyantanvullingala 我在这里遗漏了什么吗?为什么不简单地std::cout &lt;&lt; std::count(s.begin(), s.end(), '\n');?为什么所有这些代码都是为了获取与某个字符匹配的字符数?您的代码效率也很低,因为它在每次迭代时调用substr(),创建临时的std::string 对象。这就是为什么尝试从在线竞赛网站学习 C++ 是浪费时间的原因。

标签: c++ string algorithm data-structures c++17


【解决方案1】:

扫描字符串,直到找到'/'。然后检查紧随其后的字符是'n'。在这两种情况下,继续扫描。当心角落案例...

警告:

这是在 OP 更改问题之前编写的。有了新的声明,这就更加基本了。

【讨论】:

  • OP 现在已经澄清他们的意思是反斜杠而不是 /。最好在发布答案之前等待明确。
  • @AdrianMole:'\n' 的问题是如此琐碎,以至于'/n' 实际上更有可能。
  • 确实如此。 (可能。)对于那些了解什么是转义序列的人来说这是微不足道的。
【解决方案2】:

我建议使用std::count:

#include <algorithm> // std::count
#include <iostream>  // std::cin, std::cout
#include <string>    // std::string

int main() {
   std::string s = "Shroud is\n a godlike player in\n video gaming community.";
   std::cout << std::count(s.begin(), s.end(), '\n') << '\n';
}

输出

2

不相关的建议:

【讨论】:

    【解决方案3】:

    在 C 和 C++ 中,"string" 表示文字字符串,'c' 表示文字字符。 但并不是所有的东西在引号之间都是有效的。你如何表示一个有两行的字符串? C++ 说整个字符串需要在一行,所以这是无效的:

    "line one
    line two"
    

    另外你如何表示一个包含引号的字符串?这也是无效的:

    "Bob says "hello"."
    

    因为第一个字符串以双引号结尾——那是两个字符串之间有一些无效的东西。

    为了解决这些问题,该语言允许在字符串或字符中使用转义序列,您可以使用这些转义序列来表示您无法在其中键入的字符。例如,您可以写"line one\nline two"\n 不是两个字符,而是一个字符。编译器在解释字符串时将其转换为行分隔符。同样,你可以写'\n' do 表示行分隔符。

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2011-03-03
      • 2010-10-06
      • 2015-11-22
      相关资源
      最近更新 更多