программа работает не до конца
написал программу, которая из текста удаляет все символы, не являющиеся буквами, кроме пробелов. Если использовать string - то всё работает, но если использовать char - то программа работает не полностью, т.е. не выводит буквы, стоящие после цифры/символа (например при вводе строки: edtrfy54 6bhjkj %^u выводит edtrfy, хотя должно: edtrfy bhjkj u). в чем ошибка?
#include <cstring>
using namespace std;
int main() {
char s[255]; //Объявляем символьную строку (массив типа char)
char str[100] = "";
cout << "Enter a string:\n";
cin.getline(s, 255, '\n'); //Вводим строку с клавиатуры
for (int i = 0; i < strlen(s); i++) { //Пробегаем по строке циклом (слева направо)
if ((s[i] >= 'a' && s[i] <= 'z') ||
((s[i] >= 'A' && s[i] <= 'Z') ||
(s[i] == ' '))) { //Если символ латинская буква
str[i] += s[i]; //Записываем в новую строку символы, являющиеся буквами
}
}
cout << "Output of the program: " << str << "\n";
return 0;
}
Ответы (1 шт):
Автор решения: VoS13
→ Ссылка
Как сказал @EOF нужно добавить отдельный счетчик для для массива str, иначе он берет значение i-го индекса (комментарий @Stanislav Volodarskiy
) и как добавил @wololo в месте, где находится символ, неподходящий под условие будет стоять '\0', соответственно конец строки. Код:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[255]; //Объявляем символьную строку (массив типа char)
char str[100] = "";
cout << "Enter a string: ";
cin.getline(s, 255, '\n'); //Вводим строку с клавиатуры
for (int i = 0, j = 0; i < strlen(s); ++i) { //Пробегаем по строке циклом (слева направо) // добавил "j", как счетчик
if (isalpha(s[i]) || (s[i]==' ')) { //Если символ латинская буква
str[j] += s[i]; //Записываем в новую строку символы, являющиеся буквами // ***str[j]
++j; // Если условие выполняется - увеличиваем j
}
}
cout << "Output of the program: " << str << endl;
system("pause");
return 0;
}