c ++将一两三个文本转换为123,将文件中的零一两转换为12,并将它们分类为12 123

时间:2015-05-15 21:01:03

标签: c++ string numbers

将一两三个文本转换为123,将文件中的零一两转换为12并将它们排序为12 123我从包含此输入的文件中获取输入。我将它们打印但我无法对它们进行排序..我使用atoi函数转换为数字,但然后它打印0.请帮助。

一二三

五七

零一两

三二一

#include<iostream>
#include<string.h>
#include<fstream>
#include <stdlib.h>
using namespace std;
int findno(char * a);

ifstream fin;
int i=0,k=0,j=0,count=0,s=0;
char ar[100],ch,str[100],no[100][100];
int main(int argc,char * argv[])
{
  fin.open(argv[1]);
  fin.getline(ar,100);

  while(i<strlen(ar))
  {
    if(ar[i]!=' ')
    {
      str[k++]=ar[i];
      i++;
      if(i==strlen(ar))
      {
        fin.getline(ar,100);
        no[s][j++]=findno(str);
        cout<<(int)no[s][j-1]<<"\n";
        i=0;
        k=0;
        j=0;
        s++;
      }
      continue;
    }
    if(ar[i]==' ')
    {
      no[s][j++]=findno(str);
      cout<<(int)no[s][j-1];
      i++;
      k=0;
    }
  }

  cout<<atoi(no[0])<<" ";

  fin.close();
  return 0;
}

int findno(char * a)
{
  if(a[0]=='z')
    return 0;
  if(a[0]=='o')
    return 1;
  if(a[0]=='t' && a[1]=='w')
    return 2;
  if(a[0]=='t' && a[1]=='h')
    return 3;
  if(a[0]=='f' && a[1]=='o')
    return 4;
  if(a[0]=='f' && a[1]=='i')
    return 5;
  if(a[0]=='s' && a[1]=='i')
    return 6;
  if(a[0]=='s' && a[1]=='e')
    return 7;
  if(a[0]=='e')
    return 8;
  if(a[0]=='n')
    return 9;
}

1 个答案:

答案 0 :(得分:0)

  

零一两为12

您可以使用关于呈现非零字符的标记信号,如下例所示。在读取下一个单词之前将flag设置为false,如果找到一些非零字符,则设置为true。

bool flag = false;
int tmp;
while(i<strlen(ar))
{
if(ar[i]!=' ')
{
  str[k++]=ar[i];
  i++;
  if(i==strlen(ar))
  {
    fin.getline(ar,100);
    tmp=findno(str);

    if (flag || (tmp > 0))
    {
      no[s][j++] = tmp;
      cout << tmp <<"\n";          
    }
    i=0;
    k=0;
    j=0;
    flag = false;
    s++; 
   }
   continue;
}
if(ar[i]==' ')
{
  tmp=findno(str);      
  if (tmp > 0)
    flag = true;
  if (flag)
  {
    no[s][j++] = tmp;
    cout << tmp;
  }
  i++;
  k=0;
}
}