Замена в строке на С
{
char str[255];
char str2[255];
char s[1];
int i;
gets(str);
for (i = 0; i < strlen(str); i++)
{
s[0] = str;
if (str == '-')
strcat(str2, "#-");
else
if (str == '+')
strcat(str2, "#");
else
strcat(str2, s);
}
printf("%s", str2);
}
В чем может быть проблема?
В Си строки являются нуль-терминированными, т. е. с символом '\0' в конце. Поэтому нужно в конец строки str2 (изначально пустой) записать ноль. Другими словами, эта строка в вашем случае должна состоять вначале из одного нуля (подсказка: можно просто "").
Функция strcat работает именно с такими строками. Поэтому прибавление одного символа strcat(str2, s); ошибочно. В конце строки s тоже должен быть символ '\0'.
В Си строки являются нуль-терминированными, т. е. с символом '\0' в конце. Поэтому нужно в конец строки str2 (изначально пустой) записать ноль. Другими словами, эта строка в вашем случае должна состоять вначале из одного нуля (подсказка: можно просто "").
Функция strcat работает именно с такими строками. Поэтому прибавление одного символа strcat(str2, s); ошибочно. В конце строки s тоже должен быть символ '\0'.
Спасибо. А я и забыл что-то, то что str2 обнулить надо) А можно обнулить str2 не посимвольно, как тут:
str2='\0';
а по другому?
подсказки не читаем?))
Все читаем) Просто компилятор выдавал ошибку при обнулении в коде, например str = ""; А если обнулить при инициализации переменной (char str[255] = "";), то все работает. Поэтому и спросил, т.к если потребуется ее обнулить после использования в середине программы, то такой способ не прокатит(
в чем смысл обнулять каждую ячейку массива? достаточно обнулить первый элемент массива, под индексом ноль, и все.
а что, использование функции strcat это принципиально? обыкновенным присвоением можно обойтись, в цикле прохода по массиву:
{
if(str == '+')
{
str2[j] = '#';
continue;
}
else if(str == '-')
{
str2[j] = '#';
++j;
}
str2[j] = str;
}
а что, использование функции strcat это принципиально? обыкновенным присвоением можно обойтись, в цикле прохода по массиву:
А какой код с точки зрения быстродействия и "правильности" написания лучше ? Сначала, я таким же методом делать пробовал, но что-то там не получалось)
насчет быстродействия, насколько я понимаю, без strcat код быстрей, хотя с сегодняшними компами даже в более серьезных программах можно не прочувствовать особой разницы, а уж в такой программе и подавно, а правильности, я не специалист, извини, но если бы мне надо было бы решить эту задачу, я бы так написала, как написала выше, ну или может немного бы изменила бы, но суть такова же, не вижу причин использования готовых, сторонних функций.
посуди сам:
1. вызов функции и передача параметров
2. функция должна пройти от начала str2 до его конца при каждом вызове и только после этого добавлять требуемые символы.
3. возврат к исходной функции
тогда как если ты держишь текущий индекс для str2, то нет никакой необходимости каждый раз проходить этот массив, просто добавляешь требуемые символы и делаешь инкремент индексу - гораздо меньше телодвижений )).
при большем количестве данных подобные вещи могут играть роль.
а так конечно у меня нет практического опыта, чтобы судить более глубоко )))