如果函数c ++,更容易编写这个

时间:2016-10-10 16:41:09

标签: c++ if-statement

是否有更简单的方法来编写这个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文件中的符号是否匹配所有字母,@符号和“。”(句点)

有没有更简单的方法来完成所有这些?非常感谢任何帮助!

3 个答案:

答案 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')