Убрать с массива Char переходы '\n'

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShyRka_coder, 11 Jun 2011.

  1. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    народ есть массив чар , в нем записанные данные:
    4357753441
    3425335345
    4357753441
    3425335345
    4357753441
    3425335345

    а как мне сделать что бы все эти данные были в 1 строку ... Хелп... ( делал по разному может с вас кто то посоветует что то )
     
  2. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Создать еще один массив и скопировать туда как надо, хоть в строчку, хоть в столбик)
     
  3. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    да делал ... но не работает !!
     
  4. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Code:
    int  j= 0;
    for (int i=0; i<sizeof(szData); i++)
    {
      if (szData[i]!='\n') {
        data[j]=szData[i];
        ++j;
      }
    }
     
  5. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Сделал один хрен не работает :(
     
  6. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    может покажешь, что ты сделал. желательно весь код.
     
  7. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5

    Вот весь код, данные грузятся с линка, в szData!
     
  8. t-s

    t-s New Member

    Joined:
    5 Mar 2011
    Messages:
    30
    Likes Received:
    4
    Reputations:
    0
    Это разве не двумерный массив? Ты в цикле проверяешь каждый элемент этого массива (строка) на признак переноса. Естественно не будет работать. надо посимвольно.
     
  9. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    это одномерный массив
     
  10. t-s

    t-s New Member

    Joined:
    5 Mar 2011
    Messages:
    30
    Likes Received:
    4
    Reputations:
    0
    Ясно, тогда по идее это должно работать..

    Code:
    	char szData[] = "4357753441\n3425335345\n4357753441\n3425335345\n4357753441\n3425335345";
    	int i =0;
    	while( szData[i] != '\0') 
    	{
    		if(szData[i] != '\n')
    			std::cout << szData[i];
    			++i;
    	}
     
  11. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Code:
    char szData[] = "4357753441\n3425335345\n4357753441\n3425335345\n4357753441\n3425335345"; 
    std::remove(szData, szData + sizeof(szData), '\n');
     
  12. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    всем спасибо !!!сделал с помощью ф-и strtok!!
     
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    1) выделяешь буфер равный длине исходной строки
    2) едешь циклом по исходной побайтово переписывая в выделенный буфер
    3) если встречается \r\n (бинарно) или \n (текстово) то выполняешь continue
    4) и фапаешь так пока не встретишь большой 0


    еба, да вам без RTL никуда :D
     
    #13 sn0w, 11 Jun 2011
    Last edited: 11 Jun 2011
    1 person likes this.
  14. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Делал так, но не работало , тут загон был когда парсил страницу!!
     
  15. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    Зачем второй массив, если можно просто подвинуть элементы в оригинальном?
     
  16. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Конечно можно, аля напиши код который двигает эти элементы и сравни количество геморроя)
     
  17. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    Для тех, кто боится геморроя есть более другие языки.
     
  18. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 ЕгоАкк, двигать массив ? o_O
    есть массив у тебя 1000 элементов на 5 элементе попадается перенос... тебе надо сдвинуть 995 элементов... начинаем снова с 5... на 6 попадается перенос - двигать 994 элемента, сам не понял, что это бредово?

    Для криворуких, алгоритм описанный sn0w
    Code:
    char buf[512], buf2[512];
    char *p=buf;
    char *k=buf2;
    
    while(*p++!=0)  if(*p!=0x0A && *p!=0x0D) *k++=*p; 
    
    ^ не знаю, как насчет быстродействия, но выглядит круто :)

    в простом написании
    Code:
    int i,j;
    j=0;
    
    for(i=0;i<sizeof(buf);i++) { 
    if(buf[i]=='\r' || buf[i]=='\n') continue;
    buf2[j++]=buf[i];  
    }
    
    2 ShyRka_coder, если у тебя что-то не работает - это не повод писать на форум, а повод научиться пользоваться отладчиком (в случае с компилируемыми языками) или писать проверочные условия и выводы значений (в случае со скриптовыми языками).
     
    _________________________
    #18 Gar|k, 12 Jun 2011
    Last edited: 12 Jun 2011
    1 person likes this.
  19. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Спасибо за совет кеп:)
     
  20. ЕгоАкк

    ЕгоАкк Banned

    Joined:
    21 Sep 2009
    Messages:
    84
    Likes Received:
    18
    Reputations:
    0
    Ну выделил ты второй массив, выделение памяти операция не быстрая, а еще и проверить нужно выделилась ли память. И там и там нужно бежать по массиву, только в моём случае логика пробега чуть сложнее. Моя функция может обработать строку размером со всю память, твоя только в половину памяти.

    В результате я напишу "(void) remn(str)", а ты напишешь "if ((newstr = remn(oldstr)) == NULL)" и будешь обрабатывать ошибку выделения памяти. Если у тебя malloc в обертке, которая вызывает exit(1) в случае фейла, то твоя программа становится менее живучей.