Разделение строки

Тема в разделе "Arduino & Shields", создана пользователем r0c, 14 апр 2021.

  1. r0c

    r0c Гик

    Подскажите, пожалуйста, как привести String вида "*?1234567" к виду " *-?-1-2-3-4-5-6-7" для вывода на дисплей.
    в таком виде выводится посимвольно без проблем в терминал.
    Код (C++):

    Serial.println(String.charAt(0));
    Serial.println(String.charAt(1));
    Serial.println(String.charAt(2));
    Serial.println(String.charAt(3));
    .......
     
     
    Последнее редактирование: 14 апр 2021
  2. b707

    b707 Гуру

    если оно выводится - что еще нужно?
     
    parovoZZ нравится это.
  3. r0c

    r0c Гик

    немного с ошибкой спросил.
    отредактировал вопрос.
    как добавить в строку несколько тире?
     
  4. parovoZZ

    parovoZZ Гуру

    конкатенация строк.
     
  5. b707

    b707 Гуру

    а если так:
    Код (C++):
    Serial.print(String.charAt(0));
    Serial.print("-");
    Serial.print(String.charAt(1));
    Serial.print("-");
    Serial.print(String.charAt(2));
    Serial.print("-");
    Serial.println(String.charAt(3));
     
  6. r0c

    r0c Гик

    от этого не появятся тире между символами в строке
     
  7. b707

    b707 Гуру

    почему?
     
  8. akl

    akl Гуру

    Код (C++):

    char strRasporka(const char* str,char* outstr, int outsize,char symbol){
        int i=0;
        int j=0;
        outstr[j]=str[i];
        i++;j++;
        for(;j<outsize-2;i++){
            if(str[i]==0){break;}
            outstr[j++]=symbol;
            outstr[j++]=str[i];
        }
        outstr[j]=0;
        return str[i];
    }
     
    простейшая функция например. берет некую строку (массив чар с нулем на конце), и копирует его в другой массив, распирая символы выбранным символом. если все нормально - вернет ноль, если не влезло - вернет первый из символов который не влез.

    применять вот так например:
    Код (C++):
        char str[]="*?01234567";
        char str_tir[sizeof(str)*2];
        char result=strRasporka(str,str_tir,sizeof(str_tir),'-');
     
  9. Asper Daffy

    Asper Daffy Иксперд

    Ошибки специально вставлены для троллинга ТС? Или случайно влезли?
     
    SergeiL нравится это.
  10. akl

    akl Гуру

    я хз вроде работает как надо.
     
  11. Asper Daffy

    Asper Daffy Иксперд

    В случае пустой строки str, Вы сначала увеличите i (c 0 на 1), а потом уже сравниваете str[1] с нулём. Там нуля может и не быть, он был в str[0].
     
    Рокки1945 и akl нравится это.
  12. akl

    akl Гуру

    ну да, это баг.
    тогда вот так
    Код (C++):
    char strRasporka(const char* str,char* outstr, int outsize,char symbol){
        if(str[0]==0){return 0;}
        int i=0;
        int j=0;
        outstr[j]=str[i];
        i++;j++;
        for(;j<outsize-2;i++){
            if(str[i]==0){break;}
            outstr[j++]=symbol;
            outstr[j++]=str[i];
        }
        outstr[j]=0;
        return str[i];
    }
     
    только нафига в такую функцию пустую строку сувать
     
  13. parovoZZ

    parovoZZ Гуру

    с дуру можно и лом засунуть.