小编nov*_*ice的帖子

检查一个字符是否在字符串中至少出现 N 次。算法中的任何解决方案?

这个问题在获得解决方案方面并不难,但我想知道是否有任何 C++ 函数或算法可以解决它。

我在研究这个问题时想到了这个想法Count character chances in a string in C++

所以想知道除了从头开始编写一个函数来检查字符串中某个字符是否出现特定次数之外,我们是否还有其他选择。例如让我们说:

std::string s = "a_b_c_d_e_f_g_h_i_j_k_l_m";
Run Code Online (Sandbox Code Playgroud)

并且我们想查找 string 中是否至少有 2 个 '_'。如果我们使用std::count它将返回所有“_”的计数。std::count_if也会以类似的方式行事。我可以编写一个代码来循环遍历字符串并在计数达到 2 时立即中断,但我想知道我们是否在 C++ 算法或函数中有一些现有的解决方案。

这里的思考过程是,如果我们得到一个很长的字符串作为输入,并且做某事的标准是基于某个特定字符是否至少出现n次,那么遍历整个字符串是一种浪费。

c++ string algorithm stl

4
推荐指数
1
解决办法
273
查看次数

获取模糊符号的错误,需要帮助才能删除它

我收到此错误,我无法在visual studio 2010中删除.我正在使用一个第三方库,它使用自己的"字符串"定义Visual Studio的xstring文件也在它安装的文件夹中.现在,当我试图编译代码时,我得到以下错误

1> ...\xyz.cpp(24):错误C2872:'string':模糊符号1>可以是'第三方库路径\ string.h(31)1>或'c:\ program files(x86)\microsoft visual studio 10.0\vc\include\xstring(2063):std :: string'

编译器无法理解它应该使用哪个字符串定义.如何在visual studi 2010中删除此错误.我希望代码使用第三方字符串定义.

我试图在包含目录中设置第三方路径,但我仍然看到此错误.请帮我.提前致谢

c++

3
推荐指数
2
解决办法
3万
查看次数

程序以VS2017上的"abort()调用"错误结束

下面的代码通过给出错误退出

"abort()被称为".

是因为析构函数抛出异常?我知道从析构函数中抛出异常会导致未定义的行为,但也存在反向参数.此外,相同的程序在VS 2012中正常工作.

#include "stdafx.h"
#include<iostream>
using namespace std;
class Txn
{
 public:
     Txn()
     {
        cout<< "in Constructor" << endl;
     };

    ~Txn()
    {
        try
        {
            cout << "in destructor" << endl;
            throw 10;
        }
        catch(int i)
        {
            cout << "in destructor exception" << endl;
            throw;
        }
    }
};

int main()
{
    try
    {
        Txn t;
    }
    catch (int i)
    {
        cout << "Exception" << i << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

VS2017发行说明没有提及任何有关异常处理更改的内容.

所以我有以下问题:

  1. 从VS2017开始在析构函数中抛出异常是不正确的吗?它会一直通过调用abort()来退出程序吗?
  2. 有没有可以让它起作用的旗帜?

请建议.

c++ c++11 visual-studio-2012 c++14 visual-studio-2017

1
推荐指数
1
解决办法
1090
查看次数

在64位上迁移32位应用程序的问题

我试图使用visual studio 2010将现有的c ++ 32代码迁移到Windows7上的64代码.之前从未进行64位编译.在互联网参考的帮助下,我做了64位编译的设置.像VS2010与64位编译器等和其他配置更改.在预处理器中,我删除了WIN32并添加了WIN64.我有一些其他预处理器,如OS_WIN_32和其他一些在我的代码中特定的.在使用WIN32的代码中,我添加了额外条件为|| WIN64这只是为了确保应用程序应该使用win32和win64进行编译.当我尝试编译代码时,我收到编译错误说

致命错误C1189:#error:只应定义一个WIN32和WIN64符号

此错误来自本地代码,我们检查是否定义了WIN32和WIN64.该代码如下所示.

#if defined WIN32 && defined WIN64
# error Only one of the WIN32 and WIN64 symbols should be defined
#endif
Run Code Online (Sandbox Code Playgroud)

在VS2010中,如果未启用宏,则宏内的代码将变为灰色.在我的代码中,上面的错误也是灰色的.但我仍然得到那个错误.

我添加WIN64的代码包括windows.h.供参考givine如下.

#if defined WIN32 || defined WIN64
#include <windows.h>
#include <process.h>
#endif
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么我收到这个错误?我们不应该为64位编译添加windows.h.我尝试通过评论这个包含,但我得到其他错误与代码中使用的HANDLE.如果我去WIN32定义VS2010指向windef.h文件中的定义.此文件存在于Microsoft SDKs\windows\v7.0A\include文件夹中,即不是我的本地代码.对于依据下面给出的定义.

#ifndef WIN32
#define WIN32
#endif
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么编译器同时获得预处理器WIN32和WIN64.

在此先感谢您的帮助.

c++ 32bit-64bit

-1
推荐指数
1
解决办法
4522
查看次数