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');