将一两三个文本转换为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;
}
答案 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;
}
}