应该是while循环招致的.exe已停止工作,求指导是哪里出的错
应该是while循环导致的.exe已停止工作,求指导是哪里出的错
谢谢各位!!
------解决方案--------------------
string x[] = {...};
int len = sizeof(str); ===>>>>> WRONG !!!
------解决方案--------------------
sizeof(key);是数组中总字节数,而不是数组中的元素总个数.
如果想求得元素个数, 需要作个除法.
nCount = sizeof(key)/sizeof(key[0]);
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
bool isKey(string str);
bool isNum(string str);
bool isOper(string str);
bool isID(string str);
string SYM;
string NUM;
string ID;
string OPER;
int con=0;
ifstream fin("test.cpp");
string str;
while(fin>>str)
{
cout<<str;
if (isKey(str))
{
string str2=str+"SYM";
SYM=SYM+" "+str2;
con=1;
cout<<"关键字:"<<str<<endl;
cout<<SYM<<endl;
continue;
}
if(isNum(str))
{
SYM=SYM+" "+"NUMBER";
NUM=NUM+" "+str;
con=2;
cout<<"数:"<<str<<endl;
continue;
}
if(isOper(str))
{
SYM=SYM+" "+"OPER";
OPER=SYM+" "+str;
con=3;
cout<<"运算符:"<<str<<endl;
continue;
}
if(isID(str))
{
SYM=SYM+" "+"IDENT";
ID=ID+" "+str;
con=4;
cout<<"标识符:"<<str<<endl;
continue;
}
if(con==0)
{
cout<<"wrong input"<<endl;
continue;
}
}
fin.close();
system("pause");
}
bool isKey(string str)
{
string key[]={"char","short","int","unsigned","long","float","double","struct","union","void","enum","signed","const","volatile","typedef","auto","register","static","extern","break","case","continue","default","do","else","for","goto","if","return","switch","while","sizeof","inline","catch","dynamic_cast","mutable","protected","true","false","namespace","public","try","bool","typename","class","delete","new","template","using","explicit","operator","reinterpret","cast","this","typeid","virtual","const_cast","friend","private","throw","static","cast","asm","wchar","export"};
int n=sizeof(key);
int i=0;
do
{
if (str==key[i])
return true;
i++;
}while(i<n);
if (i==n) return false;
}
bool isNum(string str)
{
int len=str.length();
for(int i=0;i<len;i++)
{
char ch=str[i];
if (ch<48||ch>57)
return false;
}
return true;
}
bool isOper(string str)
{
string cal[]={"+","-","+=","-=","&=","^=","|=","/=","<<=","%=","*=",">>=","-=","<&","^","|","%%","||",",","?:",".*","&","::","/","%","*","()","->","--","++","[]","==",">=","<=","<",">","!=","<<",">>","+","!","~"};
int n=sizeof(cal);
int i=0;
while(i<n)
{
if (str==cal[i])
return true;
i++;
}
if (i==n) return false;
}
bool isID(string str)
{
string first="_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
string following="_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string::size_type pos;
pos= first.find(str[0]);
if(pos == first.npos)
return false;
int len=str.length();
for (int i=1;i<len;i++)
{
pos= following.find(str[i]);
if(pos == first.npos)
return false;
}
return true;
}
谢谢各位!!
------解决方案--------------------
string x[] = {...};
int len = sizeof(str); ===>>>>> WRONG !!!
------解决方案--------------------
sizeof(key);是数组中总字节数,而不是数组中的元素总个数.
如果想求得元素个数, 需要作个除法.
nCount = sizeof(key)/sizeof(key[0]);