C++ C++;字符串和字符的比较

C++ C++;字符串和字符的比较,c++,visual-studio,C++,Visual Studio,我尝试比较字符串和字符,如下所示: char filter = " " // <<== this is a tab space, so I am assuming its one char if ( line[counter] == filter[0]){ } 从技术上讲,该函数假定通过“tabspace”将字符串行拆分为一个数组。但是现在计数器并没有改变,因此它是一个无止境的循环 char-filter=“”//我不确定您实际运行的是什么代码,因为char-filter=

我尝试比较字符串和字符,如下所示:

char filter = "    " // <<== this is a tab space, so I am assuming its one char
if ( line[counter] == filter[0]){

}

从技术上讲,该函数假定通过“tabspace”将字符串
拆分为一个数组。但是现在计数器并没有改变,因此它是一个无止境的循环

char-filter=“”//我不确定您实际运行的是什么代码,因为
char-filter=“”
行没有终止符,并且该赋值肯定是非法的。不能将字符串文字(字符数组)分配给单个字符变量

char filter = "    " // <<== this is a tab space, so I am assuming its one char
如果要确定字符串的第n个字符是否为表格,可能需要以下代码:

if (line[counter] == '\t') {
  // match...
}

至于更新。如果键入为
string line=“1 90 74 84 48 76 80 85”在程序中,此字符串中没有表格。只有空间。此外,
'\t\t'
是一对表。将单个选项卡的
\t
放入其中

下面是示例函数的一个稍加修改的版本:

void getResults(string line)
{
    int tmpSize = line.length();
    int counter = 0;
    int tmpCounter = 0;
    while((tmpCounter < tmpSize) && (counter != MAX_No_Of_Grades))
    {
        if(line[counter] == ' ') {
            counter++;
        }
        else {
            cout << tmpCounter << ". this is : " << line[tmpCounter] << "a" << endl;
            tempGrade[counter] += line[tmpCounter];
        }
        tmpCounter++;
    }
}
如果要删除全局变量并处理任意数量的等级,可以使用
std::vector
在获得越来越多的等级时自动增加“数组”大小

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
std::vector<int> getResults ( const std::string& line )
{
    std::istringstream input(line);
    std::vector<int> grades;
    for (int grade=0; input >> grade;) {
        grades.push_back(grade);
    }
    return grades;
}
#包括
#包括
#包括
#包括
std::vector getResults(const std::string和line)
{
std::istringstream输入(行);
std::病媒等级;
对于(整数等级=0;输入>>等级;){
坡度。向后推(坡度);
}
返回等级;
}

好的。让我们按部分检查代码以使事情变得清楚

char filter = "    " // <<== this is a tab space, so I am assuming its one char
但你不必记住所有这些价值观。同样的方式,C++将给字符串“”提供一个值,它将给字符提供一个值。如果要获取字符的值,必须使用“”。有人认为tab实际上是一组空格,这是一种混淆。选项卡由文本编辑器解释为一组空格。但它实际上是一个单一的字符。在C++中,选项卡的字符是t。如果你真的把它放在一个字符串中并调用cout,你就会有一个标签。\t是单个字符而不是两个字符的原因是编译器在“”或“”中的反斜杠后对直接字符给出了“特殊”解释

因此,下面将为数据类型为char的变量指定值9:

char filter = '\t';
现在请看您的if声明:

if ( line[counter] == filter[0])
if语句将字符与字符串行中的索引“counter”进行比较。这是可能的,因为字符串是一个字符数组(它实际上是一个类,但暂时不用担心)。但筛选器不是数组,而是单个字符。所以它不会有索引(例如[0])。您所需要的只是创建的变量。这种混淆通常会发生,因为引入字符串的概念时通常没有解释字符串不是数据类型(这就是为什么字符串不是蓝色的,这就是为什么必须包含一个库)

因此,只需删除索引即可:

if (line[counter] == filter)
当然,您可以直接将其与选项卡进行比较

if (line[counter] == 9);


希望这能让您更好地理解实际发生的情况。

是的,它确实可以编译,我在它后面附加了一条else语句,它直接指向了这一点line@AhouraGhotbi你可能想让我看看里面是什么?此外,由于这是C++,为什么不在两个地方使用STD::string?以前从未见过像C++那样声明的字符。和一个失踪者;到boot@danca很抱歉,我正在使用我的电脑,速度很慢,并且在mac上发布了这个问题,因此我必须键入上面的代码,但错过了
@FailedDev我已经更新了问题以显示字符串
行中的内容
您是否知道:要将制表符放入字符串中,您应该编写
\t
?或者字符选项卡是
'\t'
if ( line[counter] == filter[0])
if (line[counter] == filter)
if (line[counter] == 9);
if (line[counter] == '\t');