String.find;不能正确地找到值 我正在做一个项目,包括在C++中分离字符串并在其中找到一些东西。代码的这一部分应该做的是遍历一系列坐标,如:

String.find;不能正确地找到值 我正在做一个项目,包括在C++中分离字符串并在其中找到一些东西。代码的这一部分应该做的是遍历一系列坐标,如:,c++,string,find,C++,String,Find,12 22 N 2 34 W 或 2343s32212w 并根据是否在字符串中找到布尔Sneg和Wneg变量,找到S或W,将其更改为true。问题是,在所有情况下,这两个值总是返回true。 在这个问题中,“线”是一个以上面列出的方式包含坐标的钉 #include<fstream> string south = 'S'; string west = 'W'; size_t found0 = line.find(south); if(found0 !=

12 22 N 2 34 W

2343s32212w

并根据是否在字符串中找到布尔Sneg和Wneg变量,找到S或W,将其更改为true。问题是,在所有情况下,这两个值总是返回true。 在这个问题中,“线”是一个以上面列出的方式包含坐标的钉

#include<fstream>
    string south = 'S';
    string west = 'W';

    size_t found0 = line.find(south);
    if(found0 != std::string::npos)
    {
        char super = line.at(found0);
        if(super =='S')
        {
            Sneg = false;
        }
        else Sneg = true;
    }
    size_t found1 = line.find(west);
    if(found1 != string::npos)
    {
        char duper = line.at(found1);
        if(duper == 'W')
        {
            Wneg = false;
        }
        else Wneg = true;
    }
#包括
字符串南='S';
字符串west='W';
大小\u t found0=直线查找(南);
if(found0!=std::string::npos)
{
char super=line.at(found0);
如果(超级=='S')
{
Sneg=假;
}
else Sneg=true;
}
尺寸\u t found1=直线查找(西);
if(found1!=字符串::npos)
{
char duper=第1行(第1行);
如果(duper='W')
{
Wneg=假;
}
否则为真;
}

这就是您想要的:

const char south = 'S', west = 'W';
string line = "12 22 N 2 34 W"; // or some other source
bool Sneg = ( line.find(south) == string::npos );
bool Wneg = ( line.find(west)  == string::npos );
您的解决方案存在一些问题,尤其是:

1) 使用字符初始化字符串

2) 如果
if
条件为false,则不设置
Xneg
的值

这甚至不会编译:
stringsouth='S'string::find()
工作正常。从你发布的内容中不清楚你做错了什么,但你可以将
Sneg
的设置简化为一行代码,在我看来,这行代码更容易阅读:
Sneg=(line.find('s')==string::npos)
(假设您想要
Sneg==true
,如果字母S不在行中)。类似地,对于
oweng
“将
string::find
的结果存储在无符号类型中”不是问题,但很好,因为
std::npos
实际上是
size\t
类型,而
string::find
返回
size\t
。你说得对,我记错了。或者他们改变了。移除了那个部分