Программа для удаления специальных символов и цифр из строки и печати только английских букв

это то, что я пробовал.это работает правильно для маленькой струны, такой как wel $ co * me но дает странный результат для pass @ word. где я точно ошибаюсь?

#include <stdio.h>
#include <string.h>
int main()
{
  char s[100],rs[100];
    int i,c=0;
  scanf("%s",s);
  int n = strlen(s);
  for(i=0;i<n;i++)
  {
    if(((int)s[i] >= 65 && (int)s[i] <= 90) ||((int)s[i] >=97 && (int)s[i] <= 122)  )
    {
      rs[c] = s[i];
      c++;

    }

    else
    {
      continue;

    }
  }
printf("%s",rs);
      return 0;
}

Пробовали отлаживать?

Baris Yakut 13.09.2018 21:35

c или C++? пожалуйста, выберите один

463035818_is_not_a_number 13.09.2018 21:36

Маленькая струна? "wel$co*me" имеет ту же длину, что и "pass@word"

Weather Vane 13.09.2018 21:37

Отсутствует нулевой символ.

chux - Reinstate Monica 13.09.2018 21:37

[Вне темы] else { continue; } не нужен в цикле for. Если вы его отбросите, цикл for все равно продолжится.

NathanOliver 13.09.2018 21:37

Обратите внимание на библиотечную функцию isalpha(), которая является переносимой и более читаемой, чем жесткое кодирование, что, как я полагаю, является значениями ASCII.

Weather Vane 13.09.2018 21:38

@WeatherVane Да, и isalpha() часто называют неправильным с потенциальным подписанным char, и он имеет зависимости от локали, но в остальном это здорово.

chux - Reinstate Monica 13.09.2018 21:41
0
7
531
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

but gives weird output for pass@word. where am i going wrong exactly?

printf("%s",rs); ожидает, что rs будет указателем на нить. Однако без определенного нулевой символ в данных, на которые указывает rs, результатом будет неопределенное поведение или, в случае OP, «странный вывод».

Простое решение -

rs[c] = '\0'; // add this after the loop
printf("%s",rs);

Еще один важный момент - избежать переполнения буфера - используйте ограничение ширины.

// scanf("%s",s);
scanf("%99s",s);

У кода есть и другие недостатки, но на данный момент они являются ключевыми.

Другие вопросы по теме