поиск в строке
char formatted[256] = {0};
// Поиск "М" в outBuff (в исходной строке)
tmp = strstr(outBuff, chSearch);
// поскольку нужна буква M (т.е. её заменять не нужно) то свигаем на ещё один байт положение
tmp += 1;
// ставим нуль символ после "М" для того чтобы потом копировать только начало строки
*tmp = 0;
// копируем в строку formatted всё вместе с буквой M до цифр
strcpy(formatted, outBuff);
Задача: Заменить все цифры которые следуют после "М" на нужные мне. Кол-во цифры всегда одинаковое - 12, так что их определять не нужно.
outBuff - исходная строка с текстом.
chNeeded - то что нужно подставить.
chSearch - то что нужно найти
tmp - темповая строка для работы.
Need help :(
char formatted[256] = {0};
// Поиск "М" в outBuff (в исходной строке)
tmp = strstr(outBuff, chSearch);
// поскольку нужна буква M (т.е. её заменять не нужно) то свигаем на ещё один байт положение
tmp++;
// ставим нуль символ после "М" для того чтобы потом копировать только начало строки
*tmp = 0;
// копируем в строку formatted всё вместе с буквой M до цифр
strcpy(formatted, outBuff);
strcat(formatted, chNeeded);
//если еще есть что-то после цифр в outBuff
//тогда можно написать
tmp++;
if(strlen(tmp)>11)strcat(formatted, tmp+11);
strcpy(formatted+tmp-outbuff, tmp+1);
... not found...
char formatted[256];
// Поиск "М" в outBuff (в исходной строке)
tmp = strstr(outBuff, chSearch);
if (tmp)
{
strncpy(formatted, outBuff, tmp-outBuff);
strcpy(formatted+(tmp-outBuff), chNeeded);
}
Блин, скобки забыл... Полный текст такой:
char formatted[256];
// Поиск "М" в outBuff (в исходной строке)
tmp = strstr(outBuff, chSearch);
if (tmp)
{
strncpy(formatted, outBuff, tmp-outBuff);
strcpy(formatted+(tmp-outBuff), chNeeded);
}
В 12:35 Вы исправили только один баг. Из первоначальных 4, осталась половина :). Вы сегодня тоже как я до 3 утра работали?
char formatted[256];
strcpy(formatted, outBuff);
tmp = strstr(formatted, chSearch);
if(tmp)strncpy(tmp+1, chNeeded, srtlen(chNeeded));
В 12:35 Вы исправили только один баг. Из первоначальных 4, осталась половина :). Вы сегодня тоже как я до 3 утра работали?
Покажите остальные три. Учиться буду.
char formatted[256];
// Поиск "М" в outBuff (в исходной строке)
tmp = strstr(outBuff, chSearch);
if(tmp)
{
strncpy(formatted, outBuff, tmp-outBuff[color=red]+1[/color]);
strcpy(formatted+(tmp-outBuff [color=red]+1[/color]), chNeeded);
}
Принято.
А зря. Потенциальный баг. Вместо 1-ц, нужно бы писать strlen(chSearch), или хотя бы вместо strstr(...) использовать strch.
А зря. Потенциальный баг. Вместо 1-ц, нужно бы писать strlen(chSearch), или хотя бы вместо strstr(...) использовать strch.
Нет, уважаемый Mоngооsе, у меня было правильно написано. Ваши исправления ошибочны. Пора, видимо, вам всё же отдохнуть. Нельзя так много работать ;)
Ну, а по поводу strchr и strlen вы, конечно, правы. Однако, я не хотел переписывать всю программу, а максимально постарался двигаться в русле авторского стиля. Думаю, через некоторое короткое время ProgMaster будет использовать str* легко и непринуждённо и тогда напишет эту программу более правильно и превратится в настоящего мастера программирования, такого, как вы.
Нет, уважаемый Mоngооsе, у меня было правильно написано. Ваши исправления ошибочны. Пора, видимо, вам всё же отдохнуть. Нельзя так много работать ;)
Уж извините. Прокрутите в голове случай, когда слово начинается буквой "M". Тогда tmp==outBuff. Ф-ия
strncpy(formatted, outBuff, tmp-outBuff);
перекопирует 0 символов. Хотя буква M должна быть в результирующей строке.
...буква M должна быть в результирующей строке...
Да, вы правы. Мне почему-то показалось, что она только отмечает позицию замены.
//тогда можно написать
tmp++;
if(strlen(tmp)>11)strcat(formatted, tmp+11);
Такс....тут после номера tmp++ делает пробел. А дальше что происходит никак не пойму ?
Такс....тут после номера tmp++ делает пробел. А дальше что происходит никак не пойму ?
Он не делает пробел. Просто пропускает 0-й символ.
Но алгоритм ниже не лучше?
char formatted[256];
strcpy(formatted, outBuff);
tmp = strstr(formatted, chSearch);
if(tmp)strncpy(tmp+strlen(chSearch), chNeeded, srtlen(chNeeded));