是否有更简单的方法来编写这个if语句?
int main ()
{
char k[100];
int i=0;
ifstream fd ("info.txt");
while (!in.eof())
{
fd >> k[i]
if (int(k[i]) != 96 || int(k[i]) != 97 ||
int(k[i]) != 98 || int(k[i]) != 99)
i++;
}
}
等等到122.基本上我要做的就是检查.txt文件中的符号是否匹配所有字母,@符号和“。”(句点)
有没有更简单的方法来完成所有这些?非常感谢任何帮助!
答案 0 :(得分:4)
试试这个:
char c;
while (fd >> c)
{
if ((c < '`') || (c > 'c'))
{
k[i] = c;
++i;
}
}
通常,使用字符常量比ASCII十进制等值更具可读性。
另外,using eof in a loop is considered wrong,所以将输入操作放在while
表达式中。
由于您的值是连续的,因此您可以使用<
和>
运算符来减少比较次数。
编辑1:
另一种方法是将有效字母放入字符串中并搜索字符串。
const std::string invalid_letters = "@.abcdefghijklmnopqrstuvwxyz";
while (fd >> c)
{
if (invalid_letters.find(c) == std::string::npos)
{
k[i] = c;
++i;
}
}
您还可以使用islower
来检测小写字母。
答案 1 :(得分:0)
您可以像这样编写if语句:
if (int(k[i]) < 96 || int(k[i]) > 122){
i++;
}
答案 2 :(得分:0)
from scipy import misc
import numpy as np
im = misc.imread('logo.jpg')