gpt4 book ai didi

c++ - cout语句中的神秘换行符

转载 作者:太空狗 更新时间:2023-10-29 20:30:27 26 4
gpt4 key购买 nike

我写了一个小片段来搜索数组中的匹配字符串,然后以格式良好的方式输出并行数组的结果。但是,我一定对字符串输出的工作方式有一些根本性的误解,因为无论我把制表符、换行符放在哪里,或者我是否使用 endl,我都无法正确输出它。在我的代码中。

相关代码如下:

for (int i = 0; i < arrayCount; i++) {
if (arrayCopy[i].find(localString) != string::npos) {
cout << "\n\t"
<< array1[i] << " {"
<< subArray1[i] << ", "
<< subArray2[i] << "}";
}
}

我希望结果在每一行的开头都有一个制表符:

         MatchedString1 {Data, MoreData}         MatchedString2 {Data, MoreData}         MatchedString3 {Data, MoreData}

相反,我得到如下所示的结果,其中选项卡出现在空行上(第一个结果除外):

         MatchedString1 {Data, MoreData}MatchedString2 {Data, MoreData}MatchedString3 {Data, MoreData}

C++ 中存在什么恶魔般的怪癖让我如此痛苦?!

最佳答案

使用以下来源重现您的问题:

$ cat test.cpp 
#include <iostream>
#include <string>

int main() {
using std::cout;
using std::string;

const std::string array1[] = {"MatchedString1", "MatchedString2", "MatchedString3"};
const std::string arrayCopy[] = {"MatchedString1", "MatchedString2", "MatchedString3"};
const std::string localString = "String";
const std::string subArray1[] = {"Data", "Data", "Data"};
const std::string subArray2[] = {"More data", "More data", "more data"};
const unsigned int arrayCount = 3;

for (int i = 0; i < arrayCount; i++) {
if (arrayCopy[i].find(localString) != string::npos) {
cout << "\n\t"
<< array1[i] << " {"
<< subArray1[i] << ", "
<< subArray2[i] << "}";
}
}
}

编译运行:

$ g++ test.cpp 
$ ./a.out

MatchedString1 {Data, More data}
MatchedString2 {Data, More data}
MatchedString3 {Data, more data}

结论:

额外的换行符在您的数据中。

建议:

使用方括号来描述您的输入:

std::cout << "[" << array1[i] << "] {[" << subArray1[i] << "], [" << subArray2[i] << "]}" <<  std::endl;

剥离字符串:

如果您发现需要剥离字符串,您可能会发现以下函数很有用:

std::string lstrip(const std::string& s, const char* chars = " \t\r\n")
{
std::string::size_type begin = s.find_first_not_of(chars);
if (begin == std::string::npos)
{
return "";
}
return std::string(s, begin);
}

std::string rstrip(const std::string& s, const char* chars = " \t\r\n")
{
std::string::size_type end = s.find_last_not_of(chars);
return std::string(s, 0, end + 1);
}

std::string strip(const std::string& s)
{
return lstrip(rstrip(s));
}

像这样使用:

        std::cout << "\t"
<< strip(array1[i]) << " {"
<< strip(subArray1[i]) << ", "
<< strip(subArray2[i]) << "}"
<< std::endl;

关于c++ - cout语句中的神秘换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com