PDA

View Full Version : گفتگو: پردازش متن



hr.siroos
پنج شنبه 16 آبان 1392, 07:35 صبح
من یک سوال دیروز مطرح کردم بعضی از دوستان ـن را درخواست حل تمرین تشخیص داده و حذف کرده اند
حال من خودم برنامش نوشتم و2-3 باگ بزرگ داره یک اینکه 0 قبل عدد را جزوه عدد حساب می کنه.
در برنامه باید عداد حداکثر 3 رقمی باشندو در برنامه من اگر عدد5 رقمی وارد شود رقم 5 به عنوان یک عدد جدا شناسایی می کنه و عدد بالای 255 نباید شناسایی کنه می کنه(خلاصه اینکه ما IP میخوایم از توی متن پردازش کنیم)


int main()
{
string s;
//cin >> s;
s = "salam 10121.077.9.8.110.130jkd!.vfdsz1213fdsfs.10.27.110 .140";

char temp[2];
temp[0]='.';
temp[1]='\0';
s.append(temp);

string ip;
//int len = s;
//for(s[0])
int i = 0;
int sec = 0;
bool filled = false;
for(char & ch : s)
{
//int i = 0;
switch (sec)
{
case 0:
{
if(i < 3 && isdigit(ch))
{
i++;
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
filled = true;
}
else if(ch == '.' && filled)
{
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
i = 0;
sec = 1;
filled = false;
}
else
{
i = 0;
sec = 0;
ip.clear();
filled = false;
}
break;
}


case 1:
{
if(i < 3 && isdigit(ch))
{
char temp[2];
temp[0]=ch;
temp[1]='\0';
i++;
ip.append(temp);
filled = true;
}
else if(ch == '.' && filled)
{
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
i = 0;
sec = 2;
filled = false;
}
else
{
i = 0;
sec = 0;
ip.clear();
filled = false;
}
break;
}
case 2:
{
if(i < 3 && isdigit(ch))
{
i++;
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
filled = true;
}
else if(ch == '.' && filled)
{
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
i = 0;
sec = 3;
filled = false;
}
else
{
i = 0;
sec = 0;
ip.clear();
filled = false;
}
break;
}
case 3:
{
if(i < 3 && isdigit(ch))
{
i++;
char temp[2];
temp[0]=ch;
temp[1]='\0';
ip.append(temp);
filled = true;
}
else if(!isdigit(ch) && filled)
{
cout << ip<<endl;
i = 0;
sec = 0;
ip.clear();
filled = false;
}
else
{
i = 0;
sec = 0;
ip.clear();
filled = false;
}

break;
}
} //cout << str << '-';
}
return 0;
}

مصطفی ساتکی
پنج شنبه 16 آبان 1392, 09:10 صبح
رشته ورودی را با dot و space و تغییر حالت از حروف به عدد و بالعکس tokenize کنید در انتها هم توکن های عددی را که 5 رقمی هستند را به 2 تو تبدیل کرده و در لیست نهایی درج کنید.