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