@Rastr_0

Как изменить строку?

Задача: Удалить из введенной строки такие знаки как: точка, запятая, знак вопроса и восклицательный. Решить надо без использования string
Вопрос: Почему программа неверно работает, алгоритм вроде верный?
Мое решение:
#include "pch.h"
#include <iostream>
#include <Windows.h>
char delete_punctuatuion(char* a, int& size);
int main()
{
	using namespace std;
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	char a[] = "";
	cin.getline(a, 128);
	int size = 0;
	*a = delete_punctuatuion(a, size);
	cout << "Измененная строка:\n";
	for (int i = 0; i < size; i++) 
	{
		cout << a[i];
	}
}
char delete_punctuatuion(char* a, int& size) 
{
	int b = 0;
	int const line_lenght = strlen(a);
	for (int i = 0; i < line_lenght; i++) 
	{
		if (a[i] != '.' && a[i] != ',' && a[i] != '!' && a[i] != '?')
			b++;
	}
	char* new_line = new char[b + 1];
	for (int i = 0; i < line_lenght; i++) 
	{
		if (a[i] != '.' && a[i] != ',' && a[i] != '!' && a[i] != '?')
			new_line[i] = a[i];
	}
	new_line[b] = '\0';
	size = strlen(new_line);
	return *new_line;
}
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
new_line[i] = a[i];
В общем случае индексы новой и старой строк не совпадают и возможен выход за пределы массива new_line.
PS. Для C++ настоятельно рекомендуется использовать std::string. Сейчас у вас код в стиле Си.
PPS. delete_punctuatuion в вашем примере должна возвращать char*.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
У вас тут
char a[] = "";
cin.getline(a, 128);

Хорошее такое UB, которое превращает всю дальнейшую работу программы в фарш.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы