Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;指定值的string.find()_C++_Regex_String_Assert - Fatal编程技术网

C++ c++;指定值的string.find()

C++ c++;指定值的string.find(),c++,regex,string,assert,C++,Regex,String,Assert,我在的ASSERT语句中使用string.find()来尝试匹配两段不同的文本。当我运行测试时,测试失败了。你能告诉我我做错了什么吗。我的尝试如下 这是教授给我们的一个例子 例如: 结束示例 Sausage-large 11.10 9 TS_ASSERT(string::npos != tmpstr.find("Sausage-large\t11.10\t9")); //fails Fries-large Remember to salt a lot 2.35 20 TS_ASSER

我在的ASSERT语句中使用string.find()来尝试匹配两段不同的文本。当我运行测试时,测试失败了。你能告诉我我做错了什么吗。我的尝试如下

这是教授给我们的一个例子 例如:

结束示例

Sausage-large
11.10
9

TS_ASSERT(string::npos != tmpstr.find("Sausage-large\t11.10\t9"));  //fails



Fries-large
Remember to salt a lot
2.35
20

TS_ASSERT(string::npos != tmpstr.find("Fries-large\tRemember to salt a lot\t2.35\t20")); //fails

stringstream outThing;
        printSummary(outThing, allProdList);
        string tmpstr = outThing.str();
        TS_ASSERT(string::npos != tmpstr.find("Fries-large\nRemember to salt a lot\n2.35\n20"));
        outFile << tmpstr;
        stringstream outThing2;
大香肠
11.10
9
TS_断言(字符串::npos!=tmpstr.find(“香肠大\t11.10\t9”)//失败
大薯条
记得多加盐
2.35
20
TS_ASSERT(string::npos!=tmpstr.find(“炸大鱼\t大量盐\t2.35\t20”)//失败
溪流流出;
打印摘要(输出、所有产品列表);
字符串tmpstr=outThing.str();
TS_ASSERT(string::npos!=tmpstr.find(“炸大的\n记得要加盐很多\n2.35\n20”);

outFile
\t
不是行分隔符。请尝试
\n
(linux和unix)或
\r\n
(windows)之类的操作


C++中没有“行分隔符”。代码>“\n”
是行终止符。不管平台是什么。(为什么每个人都认为他在寻找一个新行,而不是制表符?)@JamesKanze:因为他是在不同的行上写的。教授给了我们一个使用制表符的例子。我要把它添加到我的问题中,问题是,这个字符串是如何产生的?(断言也是一件非常奇怪的事情…)我的理解是,它只是检查指定的字符串是否为tempstr
printsummmary
,是否也相关。但断言后面的行不是“我的理解是,它只是检查指定的字符串是否为tempstr”-否,这将是相等运算符。npos为-1(某种程度),因此当npos!=find语句的值。当它找到我要查找的内容时返回正值,因此当我找到字符串时测试应该通过。对吗?NPO应该更像
string::size\u type(-1)
(无符号类型的最大值)。如果找到子字符串,则返回该子字符串开头的索引。如果您得到的是
npos
,则可能是搜索字符串不存在(并且您如何生成tmpString是相关的)-或者,如果您真的很不走运,您在某个地方有未定义的行为将子字符串搜索搞得一团糟。
Sausage-large
11.10
9

TS_ASSERT(string::npos != tmpstr.find("Sausage-large\t11.10\t9"));  //fails



Fries-large
Remember to salt a lot
2.35
20

TS_ASSERT(string::npos != tmpstr.find("Fries-large\tRemember to salt a lot\t2.35\t20")); //fails

stringstream outThing;
        printSummary(outThing, allProdList);
        string tmpstr = outThing.str();
        TS_ASSERT(string::npos != tmpstr.find("Fries-large\nRemember to salt a lot\n2.35\n20"));
        outFile << tmpstr;
        stringstream outThing2;
TS_ASSERT(string::npos != tmpstr.find("Sausage-large\n11.10\n9"));