M
Miller85
Все задания решил в контрольной, но в этой тупанул конкретно... Не могу и всё... Задание такое... Выяснить, совпадает ли группа символов с начальным отрезком ряда 0123456789...
Все равно не совсем понял....Кстати по поводу обработки символьных данных... Там надо было что бы допустим если вводим abc0123. то он является отрезком 0123456789 т.к 0123 отрезок 0123456789... А если a0b1c2 то нет... Вот щас над этим голову ломаю
/*
... Выяснить, совпадает ли группа символов с начальным отрезком ряда 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;
}
Просто если первоначальный вариант можно писать впринципи не думаю, то конечный уже стоит поднапряч голову... Я к этому веду...Я показал ему то задание, он сказал, что я не правильно его понял... Ну и обьяснил, как я и написал... Т.е. Если я ввиду например ав12, то он будет являтся отрезком 0123456789...т.к 12 есть в нем... А если а1в2 то нет... Может он просто решил проверить я ли это решаю? Большая разница в уровнях?
Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab