/*
... Выяснить, совпадает ли группа символов с начальным отрезком ряда 0123456789...
*/
/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>
using namespace std;
void main(void)
{
char Str[4096]; //Вводима строка
char Iskom[4096]={0}; //Искомая последовательность
char Buffer[128]; //Буферная строка для перевода из int To char*
setlocale(LC_ALL,"Russian");
cout<<"Введите свою строку(последовательность чисел) : "<<endl;
gets(Str);
for (int i=0; strlen(Iskom)<strlen(Str);i++) //Обойдем все числа от 0..до того момента пока длина искомой послед. строки не достигнит длины строки введенной
{
itoa(i,Buffer,10); //Переведем int в char*
strcat(Iskom,Buffer); //Объединим строки
}
//Добавим обработку искомой строки
//Вообщем думаю что нужно сделать так, сначало ищим в строке первое вхождение цифры isdigit
bool FindDigitLine = false; //Флаг найденой циферной последовательности
bool GoodDigit = true; // Флаг Введена верная циферная последовательность (мы пока от противного пойдем), Предположим, что ввели верную последовательность
bool StrAfterDigit = false; //флаг Чередования цифры или символа (фактор для принятия решения о ложной последовательности)
char *ptr = Str; //Заведем указатель, который указывает на Str (введеную нами строку)
for (int i = 0; i<strlen(Str); i++) //Обойдем всю введеную нами строку
{
if (!FindDigitLine) //Пока флаг найденой циферной последовательности = False
{
if (isdigit((unsigned char)Str[i])) //Проверим является ли текущий символ цифрой
{
FindDigitLine = true; //Если является выставим флаг, значит последовательность циферная начилась
ptr+=i; //Сдвинем указатель, отбросив тем самым не нужные символы из начала строки (до первой цифры)
}
}
else //Если же флаг уже выставлен, то
{
if (!isdigit((unsigned char) Str[i])) //Если текущий сивол не цифра
{
StrAfterDigit = true; //Выставим флаг что после циферной последовательности есть символы(не цифры), если хоть раз еще мы найдем цифру, то ввод был не верен
Str[i] = 0; //Обрежим строку поставив нулевой символ
}
else if (StrAfterDigit) //Если же появилась цифра после того как основная циферная послед. определена, и выставлен флаг входимости символа, то значит ввод - ошибочен
{
GoodDigit = false; //Выставим флаг
break; //Да и выйдим из цикла
}
}
}
strcpy(Str,ptr); //Скопируем в Str нашу строку на которую указывает указатель
char *Result = strstr(Iskom,Str); //Введем указатель на субстроку (можно и без него) Result = Iskom (Если субстрока совпадает с началом)
if (GoodDigit) //Если ввод верен
{
if (Result == Iskom)
cout<<"Строка '"<<Str<<"' "<<"является началом последовательности '"<<Iskom<<"...'"<<endl;
else
cout<<"Строка '"<<Str<<"' "<<"не является началом последовательности '"<<Iskom<<"...'"<<endl;
}
//Иначе выведим сообщение об ошибке
else cout << "Ошибка: Введена неверная последовательность " << endl;
}