//---------------------------------------------------------------------------
#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;
}
строки и массивы..... help(
есть 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 как подправить код?
Например вот этот код у меня прекрастно работает.
Цитата:
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'; //захлопываем строчку
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++;
}
while(massiv_spec&&massiv_spec_nomera){
tmp = *massiv_spec_nomera++;
destination[tmp] = *massiv_spec++;
}
естественно, надо делать проверку размерности, получаемого символа и т.д., это просто пример, как можно.
дело было не просто в замене символа, а в его вставке в строку...
а куча еще переменных всяких дополнительных, это просто же часть кода...... программа там побольше всябудет..... У меня уже получилось..... зашпарился немножко...... нужно всего лишь навсего
вместо
for (m = 0; m < i + 1; m++)
сделать
for (m = 0; m < i; m++)
А в конце не:
destination[t - 1]='\0';
а:
destination[t]='\0';
:D
Цитата:
Originally posted by JJohn
kot_
дело было не просто в замене символа, а в его вставке в строку...
kot_
дело было не просто в замене символа, а в его вставке в строку...
Хм... тогда это точно танцы с бубном.
Цитата:
Originally posted by kot_
Хм... тогда это точно танцы с бубном.
Хм... тогда это точно танцы с бубном.
нууу..... как умею так и сделал...... облазил библиотечку string.h но не нашел там ничего необходимого для вставки..... пришлось так сделать....
Цитата:
Originally posted by JJohn
нууу..... как умею так и сделал...... облазил библиотечку string.h но не нашел там ничего необходимого для вставки..... пришлось так сделать....
нууу..... как умею так и сделал...... облазил библиотечку string.h но не нашел там ничего необходимого для вставки..... пришлось так сделать....
Пишешь на С или на плюсах?
STL использовать нельзя по идеологическим причинам?