Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

строки и массивы..... help(

9.6K
26 сентября 2005 года
JJohn
15 / / 16.09.2005
у меня такая проблема (мучаюсь уже пол дня)
есть char destination[100], то есть массив из char. в нем забита строка размером jk

а также есть два массива:

char massiv_spec[], массив символов, которые нужно по очереди вставить в исходный массив destination в ие позиции, на которые указывает еще один массив - int massiv_spec_nomera[] того же размера что и massiv_spec (логично).

Например, massiv_spec={!@} а массив massiv_spec_nomera={5 8} значит '!' надо вставить в 5 позицию, '@' - в восьмую....

есть вот такой несложный код(со сдвигом вправо и вставки символа):

for (m=0; m<i+1; m++) // i - число вставляющихся символов
{

while (t>=massiv_spec_nomera[m])
{
destination[t]=destination[t-1];
t--; }
destination[t+1]=massiv_spec[m];
jk++; //число символов destination
t=jk; //число символов destination
}
destination[t-1]='\0'; //захлопываем строчку


Так вот в чем беда: все отлично работает при числе символов <3 и >4

Если destination содержит 3 символа, то вообще на выходе - нулевая строка(то есть каким-то макаром \0 копируется в нулевой символ), а при 4 вылазиет смайлик прям)))

Замучал уже debug... Подскажите please как подправить код?
299
26 сентября 2005 года
3D Bob
885 / / 18.04.2005
Например вот этот код у меня прекрастно работает.
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <iostream.h>
#include <windows.h>
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char destination[100];
ZeroMemory(destination,sizeof(destination));
char massiv_spec[8]={'!','@','-','4','5','6','7','8'};
char massiv_spec_nomera[8] = {0,1,2,3,4,5,6,7};
int max = 0;
for (int i=0; i<sizeof(massiv_spec); i++){
        destination[massiv_spec_nomera] = massiv_spec;
}

cout << destination << "\r\n";
cin >> "";

        return 0;
}
1
27 сентября 2005 года
kot_
7.3K / / 20.01.2000
Немного похоже на танцы с бубном. В этом простом коде не понятно как минимум 2 вещи первое, что такое
Цитата:
Originally posted by JJohn

while (t>=massiv_spec_nomera[m])
{
destination[t]=destination[t-1];
t--; }
destination[t+1]=massiv_spec[m];
jk++; //число символов destination
t=jk; //число символов destination
}
destination[t-1]='\0'; //захлопываем строчку


откуда взялось это t. Второе - что собственно цель? Строка уже помещена в массив - тогда нафига терминальный символ? Если в этом уверенности нет - то тогда что замещаем?
Почему нельзя просто получить позицию замещаемого символа, символ для замены и заменить его?
Например, типа функции в которую передавать указатель:

 
Код:
...
while(massiv_spec&&massiv_spec_nomera){
 tmp = *massiv_spec_nomera++;
 destination[tmp] = *massiv_spec++;
}

естественно, надо делать проверку размерности, получаемого символа и т.д., это просто пример, как можно.
9.6K
27 сентября 2005 года
JJohn
15 / / 16.09.2005
kot_
дело было не просто в замене символа, а в его вставке в строку...
а куча еще переменных всяких дополнительных, это просто же часть кода...... программа там побольше всябудет..... У меня уже получилось..... зашпарился немножко...... нужно всего лишь навсего
вместо
for (m = 0; m < i + 1; m++)

сделать
for (m = 0; m < i; m++)

А в конце не:

destination[t - 1]='\0';

а:

destination[t]='\0';

:D
1
27 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by JJohn
kot_
дело было не просто в замене символа, а в его вставке в строку...


Хм... тогда это точно танцы с бубном.

9.6K
27 сентября 2005 года
JJohn
15 / / 16.09.2005
Цитата:
Originally posted by kot_
Хм... тогда это точно танцы с бубном.



нууу..... как умею так и сделал...... облазил библиотечку string.h но не нашел там ничего необходимого для вставки..... пришлось так сделать....

3
28 сентября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by JJohn
нууу..... как умею так и сделал...... облазил библиотечку string.h но не нашел там ничего необходимого для вставки..... пришлось так сделать....


Пишешь на С или на плюсах?
STL использовать нельзя по идеологическим причинам?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог