小编Did*_*set的帖子

有没有办法在C中的多个字符上拆分字符串?

在C中是否有一种方法来分割字符串(使用strtok或任何其他方式),其中分隔符的长度超过一个字符?我正在寻找这样的东西:

char a[14] = "Hello,World!";
char *b[2];
b[0] = strtok(a, ", ");
b[1] = strtok(NULL, ", ");
Run Code Online (Sandbox Code Playgroud)

我希望这不会拆分字符串,因为逗号和W之间没有空格.有没有办法做到这一点?

c string split

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

我如何指导边缘走出右边的钻石?

我有一个简单的点图来展示如何执行测试.

PerformTests;                                     PerformTests<---+
PerformTests -> TestsPassed;                            |         |
TestsPassed [shape="diamond"];                          v         |
TestsPassed -> Release [label="Yes"];             TestsPassed     |
TestsPassed -> FixErrors [label="No"];                 Y|  N\     |
FixErrors -> PerformTests;                              v    FixErrors
                                                     Release 
Run Code Online (Sandbox Code Playgroud)

该图显示了除了具有菱形形状的TestPassed之外的所有节点的方框.我的问题在这里.我喜欢钻石外面的边缘,因为No是从右边(东边)的钻石中取出而不是从右下方(东南方向)倾斜.

           What I have        What I want
                ^                  ^    
               / \                / \   
              <   >              <   >--->  
               \ /\               \ /   
                v  \               v    
Run Code Online (Sandbox Code Playgroud)

compass_pt在点语法中看到过这种情况,但无法弄清楚如何使用它.我想要什么,怎么做?

dot graphviz

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

谁在+运算符中删除了复制的实例?(C++)

我搜索了如何在互联网上正确实现+运算符,我找到的所有结果都执行以下步骤:

const MyClass MyClass::operator+(const MyClass &other) const
{
    MyClass result = *this;  // Make a copy of myself. Same as MyClass result(*this);
    result += other;         // Use += to add other to the copy.
    return result;           // All done!
}
Run Code Online (Sandbox Code Playgroud)

关于这个"过程"我几乎没有问题:

  1. 以这种方式实现+运算符不是那么愚蠢,它在第一行调用赋值运算符(复制类),然后在返回中调用复制构造函数(由于返回的事实,它也复制了类)按价值,所以它破坏了第一个副本并创建了一个新的......坦白说,这并不是很聪明......)

  2. 当我写a = b + c时,b + c部分创建该类的新副本,然后'a ='部分将副本复制给自己.谁删除了b + c创建的副本?

  3. 有没有更好的方法来实现+运算符而不需要两次处理类,也没有任何内存问题?

提前致谢

c++ memory copy variable-assignment operator-keyword

9
推荐指数
2
解决办法
284
查看次数

是否有工具可以知道某个值是否具有精确的二进制表示形式作为浮点变量?

我的C API有一个函数,它作为输入a double.只有3或4个值是有效输入,所有其他值都是无效输入和拒绝.

我想检查是否可以准确表示所有有效输入值,以便我可以避免epsilon检查以提高可读性.

是否有一个工具(最好在命令行上)可以告诉我十进制值是否具有精确的二进制表示作为浮点值?

c linux floating-point binary

8
推荐指数
2
解决办法
1095
查看次数

如何将C API封装到RAII C++类中?

给定一个控制具有项目的会话的库的C API,将C API封装到RAII C++类中的最佳设计是什么?

C API看起来像:

HANDLE OpenSession(STRING sessionID);
void CloseSession(HANDLE hSession);
HANDLE OpenItem(HANDLE hSession, STRING itemID);
void CloseItem(HANDLE hItem);
Run Code Online (Sandbox Code Playgroud)

加上对这些类型之一(Session或Item)有用的其他函数,并直接映射到相关对象的C++成员函数.但这里不需要它们.我主要关注的是构建和销毁这些对象,使用RAII来管理这些类的正确打开和关闭.

我设计课程的第一个想法是纯粹而直接的RAII.包含的类接受容器对象作为构造函数参数.

class Session {
    HANDLE const m_hSession;
public:
    Session(STRING sessionID): m_hSession(OpenSession(sessionID)) {}
    ~Session() { CloseSession(m_hSession); }
};
class Item {
    HANDLE const m_hItem;
public:
    Item(HANDLE hSession, STRING itemID): m_hItem(OpenItem(hSession, itemID)) {}
    ~Item() { CloseItem(m_hItem); }
};
Run Code Online (Sandbox Code Playgroud)

这种设计的缺点是允许不良行为:在破坏所有Item对象之前,可以破坏Session对象(并调用CloseSession函数).这很烦人,因为它不应该发生.即使这种错误行为是可能的,因此无效,使用C API,我希望通过C++ API中的设计来避免它.

这就是为什么我想知道使用以下设计,其中Session包含其Items(这显示了实际的关系),并且是唯一能够构造和销毁Items的类.

class Item {
    HANDLE const m_hItem;
    Item(HANDLE hSession, STRING itemID): m_hItem(OpenItem(hSession, itemID) {}
    ~Item() { CloseItem(m_hItem); } …
Run Code Online (Sandbox Code Playgroud)

c++ api encapsulation raii

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

有哪些工具可以帮助将各种软件元素收集到完整的软件版本中?

我们的软件产品由许多部分组成.假设它由内核驱动程序部分,用户dll和GUI软件组成.在开发过程中,我们在最新版本中编译和使用它们,但在发布时它们并不相同.

实际上,内核部分必须比其他部分更早地冻结.然后,dll被冻结,以进行广泛测试,最后冻结是GUI.随着QA的发展,我们需要使用固定的GUI创建完整版本的更新版本,但仍然使用之前包含的内核驱动程序和dll.

我想知道是否存在一个工具,它将管理每个软件部分的哪个版本用于创建发布?

该工具可能会集成到工具链中,以构建所选每个软件的版本,并将它们收集到Windows安装程序或Linux软件包中.

编辑:我们现在在做什么?

截至目前,我们正在使用SVN和buildbot作为Linux/gcc和Windows/VStudio的CI工具.我们处于根据需要对整个存储库进行分支/标记的模式.但是,由于存在越来越多相对独立的软件部件,这会让人感到痛苦并使发布过程变得痛苦.

我们正在考虑将存储库布局更改为具有多个独立分支/标记的项目.这将更适合软件开发和发布周期.但是,我们绝对需要这样一个工具.

问题与拥有不同的软件有关,每个软件都有自己的分支/标记版本,并收集到完整的软件版本中.

编辑:需要什么.

最后,我理解我需要的是Windows的包管理器.Linux上RPM或DEB管理器意义上的软件包管理器.

有没有人知道Windows上的包管理器?

versioning installer continuous-integration release build

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

如何定义静态const成员?

我的Test班级有const static一个子类型的成员.我通常将此const static成员定义如下.

class Test 
{
public:
    class Dummy {};

private:
    static Dummy const dummy;

};

Test::Dummy const Test::dummy;             // ERROR HERE

int main() 
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用gcc-4.6编译此源时,它不会出错并正确编译.

使用gcc-4.4编译同一个源时,会出现以下错误: error: uninitialized const ‘Test::dummy’ 在标记的行上.

  • 还有另一种方法来定义这个静态const成员变量吗?
  • 这是gcc-4.4的限制吗?
  • 有解决方法吗?

c++ const g++ static-members

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

python unittest subTest 和skipTest 之间的交互是否定义了?

我还没有找到关于 Python unittest 功能subTestskipTest.

例如,测试它时,似乎skipTestsubTest上下文中调用时(Python 3.4 中的新功能),只会跳过当前的 subTest。允许围绕 的任何循环subTest继续使用其他值。

from unittest import TestCase

class NumbersTest(TestCase):
    def test_even(self):
        """
        Test that numbers between 0 and 5 are all even.
        """
        for i in range(0, 6):
            with self.subTest(i=i):
                if i==3:
                    self.skipTest("Skip 3.")
                self.assertEqual( i%2, 0 )
Run Code Online (Sandbox Code Playgroud)

输出显示测试在跳过 3 后继续使用值 4 和 5。

test_even (TestUnitSubTest.NumbersTest) ... skipped 'Skip 3.'

======================================================================
FAIL: test_even (TestUnitSubTest.NumbersTest) (i=1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "~/TestUnitSubTest.py", line …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-unittest

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

如何用awk计算十六进制数?

我有一个包含十六进制数字列表的文件,0x12345678每行一个.

我想对它们进行计算.为此,我想到了使用awk.但是如果awk使用该printf函数很容易打印十六进制数字,我还没有找到一种方法来解释十六进制输入而不是文本(或0转换为整数停止x).

awk '{ print $1; }'                     // 0x12345678
awk '{ printf("%x\n", $1)}'             // 0
awk '{ printf("%x\n", $1+1)}'           // 1                 // DarkDust answer
awk '{ printf("%s: %x\n", $1, $1)}'     // 0x12345678: 0
Run Code Online (Sandbox Code Playgroud)

是否可以打印,例如+1值?

awk '{ printf(%x\n", ??????)}'          // 0x12345679
Run Code Online (Sandbox Code Playgroud)

编辑:欢迎使用其他语言的一个衬垫!(如果合理的长度;-))

awk hex

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

C#程序如何使用任何版本的C++ DLL?

我们正在创建一个用C++编写的DLL,提供对某些硬件的访问.我们还有一个使用这个dll的C#程序.

我们遇到了版本问题.实际上,在运行C#程序时,它绝对想要使用它在编译时使用的确切C++ DLL版本.即如果C#程序是使用C++ dll 1.2.3.4编译的,那么程序将拒绝使用C++ dll 1.2.3.5运行.

我想指示C#程序使用1.2版本的任何C++ DLL.

我在哪里可以在C#项目中配置它?

这个问题已经被取代一个,更关系到COM.

.net c# c++ dll version

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