программа работает не до конца

написал программу, которая из текста удаляет все символы, не являющиеся буквами, кроме пробелов. Если использовать 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;
}
→ Ссылка