用于更改所有大写字母和更改所有低位字母的C编程

时间:2015-07-08 07:04:18

标签: c

这是我的代码

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

char chaCap(char n);

int main()
{
  char ch,a;
  printf("Enter Sentence\n");

  while((ch=getchar()) != '\n')
  {
    chaCap(ch);
    printf("%c",a);
  }
  printf(" \n");

  return 0;
}
void chaCap(char n)
{
  if(n >= 'a' && n <='z')
      n-=32;

}

我需要

  1. 要求用户输入句子
  2. 将句子转换为全部大写字母并打印
  3. 将句子转换为所有小写字母并打印
  4. 转换每个字符,如果它是从上到下,反之亦然。
  5. 我是为改变大写字母而做的,但我无法降低,反之亦然。

    当我为2.和3编写代码时,getchar()变得一无所有......

4 个答案:

答案 0 :(得分:2)

使用 tolower()功能:

  while((ch=getchar()) != '\n')
  {
    printf("%c", tolower(ch));
  }

答案 1 :(得分:2)

您需要在函数chaCap(char n)

中返回值
char chaCap(char n)//need to return char instead of void
{
  if(n >= 'a' && n <='z')
      n-=32;
  return n; // return capital letter here
}

然后在main()

中调用它时获取返回值
int main()
{
  //... 
  while((ch=getchar()) != '\n')
  {
    a = chaCap(ch); // get return value
    printf("%c",a);
  }

}

答案 2 :(得分:1)

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char *strlwr(char *str){
    char *s;
    for(s = str; *s; ++s){
        if(isupper(*s))
            *s = tolower(*s);
    }
    return str;
}

char *strupr(char *str){
    char *s;
    for(s = str; *s; ++s){
        if(islower(*s))
            *s = toupper(*s);
    }
    return str;
}

char *strvrs(char *str){
    char *s;
    for(s = str; *s; ++s){
        if(islower(*s))
            *s = toupper(*s);
        else if(isupper(*s))
            *s = tolower(*s);
    }
    return str;
}

int main(void){
    int ch;
    size_t i = 0, size = 32;
    char *str = malloc(size);

    printf("Enter Sentence\n");

    while((ch=getchar()) != '\n' && ch != EOF){
        str[i++] = ch;
        str[i++] = '\0';
        if(i-- == size){
            char *temp = realloc(str, (size += 32));
            if(!temp){
                fprintf(stderr, "realloc error\n");
                free(str);
                exit(EXIT_FAILURE);
            }
            str = temp;
        }
    }
    printf("original   : %s\n", str);
    printf("vice versa : %s\n", strvrs(str));
    printf("upper      : %s\n", strupr(str));
    printf("lower      : %s\n", strlwr(str));
    free(str);

    return 0;
}

答案 3 :(得分:0)

ch声明为全局变量。

以下程序会将所有大写字母更改为小写字母,将所有小写字母更改为大写字母。

您的程序需要进行一些修改才能获得所需的结果。我已经进行了必要的更改。

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

void chaCap(char ch);
char ch;

int main()
{

  printf("Enter Sentence\n");

  while((ch=getchar()) != '\n')
  {
   chaCap(ch);
    printf("%c",ch);
  }
  printf(" \n");

  return 0;
}
void chaCap(char ch)
{
  if(ch >= 'a' && ch <='z')
     ::ch=ch-32;
  else if(ch>='A'&&ch<='Z')
     ::ch=ch+32;
}