я не получаю точный вывод для моей C программы - PullRequest
0 голосов
/ 10 апреля 2020

Проблема заключается в следующем: написать программу C для преобразования строчных букв в прописные и наоборот из строки S. 1 <= S <= 100 </p>

ПРИМЕР:

INPUT

HelloWORLD

Ожидаемый ВЫХОД

hELLOworld

ВХОД

RanDoM

Ожидаемый ВЫХОД

rANdOm

Мой код

#include<stdio.h>
#include<string.h>

int main()
{ char s[100];
int i;
for (int j=0; j<=100 ; j++)
{
 scanf("%s",&s[j]) ;
}
for (i=0; s[i]!='\0'; i++)
    {
        if (s[i]>='a' && s[i]<='z')
        {
            s[i] = s[i] - 32;

        }
        else
        {
            s[i] = s[i] +32;

        }

    }
    for (int k=0; k<=100 ; k++)
    {    
        if (s[k]!='\0')
      {  printf("%c",s[k]) ; }
    }


    return 0;

}

ВЫХОД, который я получаю:

ВХОД

HelloWORLD

Текущий ВЫХОД

hELLOworldԯ@ _�"����ԯ8_�"�>sn�"�

ВХОД

 RanDoM

Текущий ВЫХОД

rANdOm�
�$@0�������$H����>s�

Какие изменения в коде мне нужно внести, чтобы избавиться от символов в конце слова?

После всех предложений и помощи я нашел код, который дает ожидаемый результат:

#include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main()
    {  char str[100];
 scanf("%s",str);
       int i;

    for (i=0; i<sizeof(str); i++)
        {    
            if (str[i]>='a' && str[i]<='z'&& str[i]!='\0')
            {
                str[i] = str[i] - 32;

            }
            else if(str[i]>='A' && str[i]<='Z'&& str[i]!='\0')
            {
                str[i] = str[i] +32;

            }

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

    }

1 Ответ

1 голос
/ 10 апреля 2020

Привет. В вашей программе есть дополнительный код, а также некоторые ошибки. Я делаю некоторые исправления в вашей программе, чтобы выполнить вашу задачу.

  • Я не пишу новый код для вашего лучшего понимания
  • Я не удаляю строки, просто комментирую эти строки и даю причина в комментариях
  • Вы должны прочитать все комментарии и удалить их перед использованием.
  • В случае каких-либо недоразумений спросите в разделе комментариев

    #include<stdio.h>
    #include<string.h>
    
    int main()
    { char s[100];
    int i,j,k;
    
     //Loop not required
     //for (j=0; j<=100 ; j++)
     //{
      scanf("%s",&s[j]) ;
     //}
    for (i=0; s[i] != '\0'; i++)
        {
    	//You should have to compare with ASCII or use string methods like islower
    
    	//if (s[i]>='a' && s[i]<='z')
    	if (s[i]>= 97 && s[i]<= 122) // ASCII for a-97 and z-122
    	{
    	    s[i] = s[i] - 32;
    	}
    	else //u may put a check here for upper case to handle errors
    	{
    	    s[i] = s[i] + 32;
    
    	}
    
        }
    
        //No loop or if statement required
       // for (k=0; k<=100 ; k++)
        //{
          //	if (s[k]!='\0')
         // {
         printf("%s",s) ;
           // }
        //}
    
    
        return 0;
    
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...