Как заменить символы только в первой половине строки?

166
02 июня 2019, 15:30

Решаю задачку, не понимаю как сделать замену только в первой половине строки.

Задача:
В заданной строке в первой половине строки все точки заменить символом ~.

Сделал только замену:

#include <iostream>
int main()
{
    char stroka[] = ".....";
    std::cout << stroka << "\n";
    for(int i = 0; stroka[i] != '\0'; ++i)
    {
        if(stroka[i] == '.')
            stroka[i] = '~';
    }
    std::cout << stroka << "\n";
    return 0;
}
Answer 1

Давайте для начала пойдем "сложным путем". Очень сложным.

#include <iostream>
int main()
{
    char stroka[] = ".....";
    std::cout << stroka << "\n";
    int len = sizeof(stroka);
    for(int i = 0; i < len/2; ++i)
    {
        if(stroka[i] == '.')
            stroka[i] = '~';
    }
    std::cout << stroka << "\n";
    return 0;
}

Но только у нас же с++!, поэтому, хотя бы так.

#include <iostream>
int main()
{
    std::string stroka = ".....";
    std::cout << stroka << "\n";
    int len = stroka.length();
    for(int i = 0; i < len/2; ++i)
    {
        if(stroka[i] == '.')
            stroka[i] = '~';
    }
    std::cout << stroka << "\n";
    return 0;
}

Правда нужно подумать, что такое половина строки, если кол-во символов нечетно.

Answer 2

Вариант без предварительного вычисления длины си-строки:

#include <iostream>

void replace_before_middle(char * begin)
{
    char const * last = begin;
    while (*last && *++last) {
        if (*begin == '.') {
            *begin = '~';
        }
        ++begin;
        ++last;
    }
}

int main()
{
    char str[] = ".+...";
    replace_before_middle(str);
    std::cout << str << std::endl;
}
Answer 3
#include <algorithm>
//...
std::replace(stroka, stroka + strlen(stroka)/2, '.', '~');

//вариант второй

std::string stroka("..........");
size_t hf = stroka.length() / 2;
cout << stroka.replace(0, hf, hf,  '~' );
Answer 4

Предложу и я свой вариант:

#include <iostream>
int main()
{
    char stroka[] = ".....";
    std::cout << stroka << "\n";
    stroka[0] = '~';
    stroka[1] = '~';
    std::cout << stroka << "\n";
    return 0;
}
READ ALSO
Сумма цифр числа 100!

Сумма цифр числа 100!

Написал код для подсчета суммы цифр в числе 100! для решения задачи на Проекте ЭйлераДо этого успешно использовал кусок кода, который непосредственно...

132