gpt4 book ai didi

c++ - 问题解析字符串

转载 作者:行者123 更新时间:2023-11-28 07:14:24 24 4
gpt4 key购买 nike

每当我的计数达到 4 或遇到这个字符“]”时,我都会尝试输入一个新行。

现在,每次我的计数为 4 时,我都可以让我的代码创建一个新行,但是当我为 ']' 添加条件时,每次迭代都会得到一个新行。我认为这可能是由我的 chartDataString.find(']') 引起的,但我不确定如何修复它。

你能看出这段代码的问题吗?:

int barCount = 0;
size_t start = 0;
size_t n = 0;
int charCount = 0;
while ((start = chartDataString.find(" |", start)) != string::npos) {
++barCount;
start+=2;
charCount++;
if (barCount == 4 || chartDataString.find("]")) {
//cout<<"Number of bars: "<<barCount<<endl;
chartDataString.insert(start, "\n");
barCount = 0;
charCount= 0;
}
}

最佳答案

if (barCount == 4  || chartDataString.find("]"))

如果 string.find() 返回 string::npos,则上述语句的计算结果为 true,因为 string::npos 很可能不是 0。

在我的机器上它是 18446744073709551615,程序将其转换为 true

正如 Anish Ram 在评论中指出的那样,string::npos is defined as :

   static const size_t npos = -1;

因此,作为 size_t,它将始终是一个正值,当将其转换为 bool 值时,其计算结果为真。

尝试以下操作:

#include <iostream>
#include <string>
using namespace std;

int main(){
if (string::npos) cout << "Entered if statement" << endl;
else cout << "DID NOT ENTER IF STATEMENT" << endl;

}

我使用的是 gcc 4.6.3,程序的输出是:

Entered if statement

更改您的代码以阅读:

if (barCount == 4  || chartDataString.find("]") != string::npos)

一切都应该工作得很好。好吧,他们至少应该编译....如果您要做的是遍历字符串中的所有字符,那么您实际上应该检查字符串中的每个位置,而不是调用 string::find()

在这种情况下,您应该维护字符串的索引,然后检查 string.at(index) == ']';

关于c++ - 问题解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20456201/

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