c - 识别大写/小写字母C的功能

标签 c string uppercase lowercase

我正在尝试创建一个函数,该函数将识别输入的第一个字母是大写还是小写,然后以相同的大小写(大写/小写)输出字符串的其余部分。

例如,"Hi there"将变为 "HI THERE" .

我不熟悉fgets .一旦我运行它,我可以输入并按 Enter 并且程序不会运行。我没有收到任何编译器错误。我相信我在 void shift 函数中出错了。

另外,我知道gets不推荐,是fgets相似的?还是使用scanf更好? ?

#include <stdio.h>
#include <ctype.h>
void shift (char *my_string); // Function declaration

int main()
{
  char inputstring[50];

  printf("Enter a string\n");
  char *my_string = inputstring;
  shift(my_string); // Function
}

void shift (char *my_string) // Function definition
{
  int i =0;
  char ch;

  for(i=0; i<50; i++)
    fgets(my_string, 50, stdin);

  while(my_string[i])
  {
    if(ch>='A' && ch<= 'Z') // When first char is uppercase
    {
      putchar (toupper(my_string[i]));
      i++;
    }
    else if (ch>='a' && ch <= 'z') // When first char is lowercase
    {
      putchar(tolower(my_string[i]));
      i++
    }
  }
  return;
}

最佳答案

您无需调用fgets()五十次。它从 stdin 中读取一行并将其写入 my_string .看来您只想阅读一行,而不是五十行(并且只保留最后一行)。 50 是读取和写入缓冲区的最大字符数(减一)。这个限制是为了防止缓冲区溢出。见 fgets() .

尝试删除 forfgets() 之前的行上循环称呼。此外,您不需要 my_stringmain() .更正后的代码:

#include <stdio.h>
#include <ctype.h>
void shift (char *my_string);//function declaration

int main()
{
  char inputstring[50];

  printf("Enter a string\n");
  shift(inputstring);
}

void shift (char *my_string) //function definition
{
  int i;
  char ch;

  if ( fgets(my_string, 50, stdin) == NULL )
    return;

  ch = my_string[0];
  for ( i=0; my_string[i]; i++ )
  {
    if(ch>='A' && ch<= 'Z') //when first char is uppercase
    {
        putchar (toupper(my_string[i]));
    }
    else if (ch>='a' && ch <= 'z')//when first char is lowercase
    {
        putchar(tolower(my_string[i]));
    }
  }
  return;
}

编辑:添加 ch @thurizas 指出的初始化。已更改 while循环到 for环形。添加了对 fgets() 的返回值的检查正如@JonathanLeffler 所建议的那样。 (请参阅他关于缓冲区大小的评论。)

关于c - 识别大写/小写字母C的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938138/

相关文章:

c - 具有可能的静态共享库函数的 LD_PRELOAD

c - 我怎样才能检查文件是否存在

c - HDF5:如何将数据附加到数据集(可扩展数组)

Java 将 Asn.1 字节数组转换为浏览器方便的字符串

Python字典转换为小写?

c - c编程中的字母递增

python - 分析字符串输入,直到它到达 Python 上的某个字母

r - 计算字符串中出现在 R 字符串中特定位置的单词

java - java PlainDocument 覆盖值的问题

shortcut - 如何在 Sublime 3 中从小写转换为大写