Удалить из строки первую цифру

Программа переписывает из строки все буквы, пропуская цифры. А как сделать так, чтобы пропускалась только первая последовательность цифр? То есть, если строка "qwe23r5ty", то выведется "qwerty", а нужно чтобы было "qwer5ty"

#include <iostream>
#include <ctype.h>

using namespace std;

void main()
{
    char buffer[1024]; //Твоя строка которую вводишь
    char Result[1024] = { 0 }; //Результат
    cout << "Input string : ";
    gets_s(buffer);
    char* ptr = Result; //Указатель на строку Result
    for (int i = 0; i < strlen(buffer); i++) //Обойти всю строку по-символьно
    {
        if (!isdigit((unsigned char)buffer[i])) //Если символ не цифра
            *ptr++ = buffer[i]; //то пишим этот символ в Result и сдвигаем указатель на 1 байт
    }
    cout << endl << "Result : " << Result;

}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Во первых: если вы не передаете количество читаемых элеменов в gets_s, то эта функция не будет знать куда вставить завершающий символ '\0', и буффер может остаться без завершающего символа. Если вы уж используете std::cout для вывода, то почему не использовать и std::cin для более безопасного и наглядного ввода?

char buffer[1024]; //Твоя строка которую вводишь
char Result[1024] = { 0 }; //Результат
cout << "Input string : ";    
cin >> buffer;

Выполнить задуманное вами, можно разными способами, одним из которой является способ, предложенной пользователем Akina. Можно также просто использовать существующие в стандарте функции копирования и конкетации, сначала копируя количество символов, пока не встретилась цифра, а потом конкетация остальной части:

int n = 0;
const char* ptr = buffer;
while (!isdigit(*ptr++)) ++n;
strncpy_s(Result, buffer, n);
while (isdigit(*ptr)) ++ptr;
strcat_s(Result, ptr);    
cout << endl << "Result : " << Result;

Можно и ничего не копировать, а читать только необходимое:

char buffer[1024]; //Твоя строка которую вводишь   
cout << "Input string : ";
int i = 0;
/*пока следующий не прочитанный символ
не является цифрой*/
while (!( isdigit(cin.peek()) )) {
    cin >> buffer[i++];
}
/*пока следующий не прочитанный символ\
является цифрой, пропускаем*/
while (isdigit(cin.peek())) 
    cin.ignore();    
//теперь читаем все остальные символы
while (cin >> buffer[i++]);
buffer[i] = 0;
cout << buffer;

P.S. Теперь вернемся к началу наблюдений. Если вы используете инструменты из С++, такие как std::cout из заголовочного С++ файла и т.п., то уж используйте С++ строки вместо С_строк, и лишнюю память не займете, и код будет компактней и читабельней.

→ Ссылка