Удаление всех вхождений символа из строки в C ++ - PullRequest
0 голосов
/ 21 апреля 2020

Мое назначение говорит, что я должен написать функцию с именем removeChar, которая;

  1. Принимает 4 ввода: целое число, строка str, строка s и символ c, но ничего не возвращает.

  2. Находит число всех вхождений c в с (как заглавные, так и строчные (подсказка: вы можете использовать коды ASCII для сравнения)) и сохраняет в num

  3. Копирует обрезанную строку в str

  4. Запишите в тот же файл функцию main (), содержащую серию тестов для демонстрации правильное поведение removeChar ().

Но все операции печати должны выполняться из функции main (). У меня есть этот код:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string removeChar(int num, string s, string str, char c);
int main()
{
    string s = "asdfasdf";
    s = removeChar(1, "a", "hello", 'h');
    cout << s;
}
string removeChar(int num, string s, string str, char c)
{
    int i;
    for (i = 0; i < s.length(); i++)
        if (int(s.at(i)) == int(c))
            num = int(c);
    str.erase(std::remove(str.begin(), str.end(), (char)num), str.end());
    return str;
}

Он не работает, и даже если бы он работал, мне нужна функция void.

1 Ответ

1 голос
/ 21 апреля 2020

Если я правильно понял описание задания, то вам нужно что-то вроде следующего:

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <cctype>

void removeChar( std::string::size_type &n, std::string &str, const std::string &s, char c )
{
    str.clear();

    c = std::toupper( ( unsigned char )c );

    auto equal_to_c = [&c]( const auto &item )
    {
        return std::toupper( ( unsigned char )item ) == c;
    };

    std::remove_copy_if( std::begin( s ), std::end( s ),
                         std::back_inserter( str ),
                         equal_to_c );

    n = s.size() - str.size();                                   
}

int main() 
{
    std::string::size_type n = 0;
    std::string str;

    removeChar( n, str, "This is a silly assignment", 's' );

    std::cout << "n = " << n << ", str = " << str << '\n';

    return 0;
}

Вывод программы:

n = 5, str = Thi i a illy aignment
...