2013-03-25 3 views
-1

Итак, я сравниваю строковые массивы смешанных букв и чисел с массивом с алфавитом, а затем собираю похожие символы (т. Е. Только буквы) и помещаю его в другой массив строк и затем распечатайте его.Сравнение 2 строковых массивов в C

Он отлично работает в первый раз. Хотя во второй раз, если строка, сравниваемая с алфавитом, меньше определенного размера, она заполняет и показывает некоторые дополнительные буквы, а иногда и вопросительный знак, который выходит извне.

Это первый раз выход:

Enter a string (1-40 characters): zxcvbnm,./asdfghjkl;qwertyuiop[] 
Output: abcdefghijklmnopqrstuvwxyz 

, а затем второй раз:

Enter a string (1-40 characters): abcdefg 
Output: abcdefgz? 

Посмотрите, что я имею в виду? 'Г? выскочил из ниоткуда.

Может ли быть что-то, оставшееся над буквами в буфере или что-нибудь еще, как только функция будет вызвана снова?

It turns out that I didn't have a null terminator at the end of the newest 
string before being printed! - Thanks to Mohamed! 
+1

предоставьте код. возможно, у вас есть терминатор null charachter missing – MOHAMED

+1

существует риск закрыть ваш вопрос, если вы не предоставите свой код – MOHAMED

+0

Извините за секунду, я совершенно новый для StackOverFlow. Я уверен, что другие ответы верны с нулевым терминатором, но тем не менее я вижу, где именно предоставить код. – PhantomThief1412

ответ

3

Проверьте свой код, строка должна заканчиваться нулевым символом '\0'. Это является причиной вашей проблемы.

в вашем коде, вы должны добавить

letters[z]= '\0'; 

после for

for (x = 0; x < 26; x++){ 
     for (y = 0; y < strLen1; y++){ 
      if (alphabet[x] == string[y]) 
      { 
       letters[z]=string[y]; 
       /* Increment z, to insert anothe letter in an empty space. */ 
       z++; 
      } 
     } 
    } 
    letters[z]= '\0'; // add this line 
    printf("Output: %s\n\n", letters); 

BTW вы можете оптимизировать проверку алфавита

строчных букв {а, Ь, с, ......, z} завершены с помощью ASCII.

так что вы можете проверить, что ASCII от string[y] находится между ASCII из 'a' и ASCII из 'z' вместо того, чтобы смотреть в alphabet[] массив. Это проще:

+0

Вот и все! Как глупо со мной! Спасибо вам большое, сэр! :) – PhantomThief1412

+0

Добро пожаловать – MOHAMED

+0

Вы имеете в виду что-то вроде «if (string [y]> = 'a' && string [y] <= 'z' ?? – PhantomThief1412

3

Строки в C завершены в NUL. Перед печатью необходимо аннулировать свой массив символов.

Установить символ после последнего на '\0'.

0

Вы должны просто использовать isalpha(), чтобы проверить, является ли char альфебатическим символом. Не нужно повторно изобретать, и тогда также нет необходимости преобразовывать в нижний регистр вручную, так как он обрабатывает либо.

+0

Wow. Честно говоря, я никогда не слышал о isalpha() раньше. Как это работает? – PhantomThief1412

+0

@ PhantomThief1412 Есть несколько isXXX. Посмотрите это в любом онлайн-руководстве C. Моя карма google получила этот хит: http://linux.die.net/man/3/isalpha –

Смежные вопросы