C++ 解析字符串时出现的问题

C++ 解析字符串时出现的问题,c++,string,find,C++,String,Find,每当我的计数达到4或遇到这个字符']'时,我都试图输入一个新行 现在,我可以让我的代码在每次计数为4时创建一个新行,但是当我为']'添加条件时,每次迭代都会得到一个新行。我认为这可能是由我的chartDataString.find(']')引起的,但我不确定如何修复它 你能看到这个代码的问题吗 int barCount = 0; size_t start = 0; size_t n = 0; int charCount = 0; while ((start = chartDataString.f

每当我的计数达到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;
    }
}
int barCount=0;
大小\u t开始=0;
尺寸n=0;
int charCount=0;
while((start=chartDataString.find(“|”,start))!=string::npos){
++酒吧计数;
启动+=2;
charCount++;
if(barCount==4 | | chartDataString.find(“])){

//您可以使用
chartDataString.find(“])检查
chartDataString
是否包含
]
。另外,
find
将返回找到字符的位置,如果未找到,则返回
string::npos
find
将计算为false的唯一时间是在第一个字符中找到字符时

相反,请尝试:

if(barCount == 4  || chartDataString.at(charCount) == ']') {
这将检查当前字符是否为
]
。注意,我不清楚您当前的字符位置。您可能需要将
字符计数
替换为
开始

if (barCount == 4  || chartDataString.find("]"))
如果
string.find()
返回
string::npos
,则上述语句将计算为
true
,因为
string::npos
很可能不是0

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

正如安妮什·拉姆在评论中指出的那样,
string::npos

因此,作为一个
大小\u t
,它将始终是一个正值,当转换为布尔值时,将作为真值计算

请尝试以下操作:

#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;

}
事情应该很顺利,至少他们应该编译。。。。 如果您要做的是迭代字符串中的所有字符,那么实际上应该检查字符串中的每个位置,而不是调用
string::find()


在这种情况下,您应该在字符串中维护一个索引,然后选中
string.at(index)==']';
取而代之。

根据其他逻辑判断,我认为搜索的实际位置可能是
start
,而不是
charCount
。除此之外,我相信你在这里的想法是正确的。
std::string::npos
是的,我从来没有说过你发布的内容是错误的。这就是定义:)@AnishRam:注意它是错误的定义为-1而不是int的
size\u t
将始终为正您的结果是正确的。
npo
似乎有一个无符号类型。因此在这种情况下-1将=18446744073709551615。
#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;

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