Программа переписывает из строки все буквы, пропуская цифры. А как сделать так, чтобы пропускалась только первая последовательность цифр? То есть, если строка "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;
}
Во первых: если вы не передаете количество читаемых элеменов в 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 из заголовочного С++ файла и т.п., то уж используйте С++ строки вместо С_строк, и лишнюю память не займете, и код будет компактней и читабельней.
Продвижение своими сайтами как стратегия роста и независимости