使用C从低到大写转换

时间:2016-03-10 16:30:50

标签: c arrays string

问题陈述

我在解决编程竞赛问题时面临困难,其内容如下:

  

您将获得英文字母的T名称。每个名字都包含一些   从A到Z的大写字母,一些小写字母   从a到z和一些空格。你必须改变名称   小写到大写。最初是大写的字母   将保持不变,空间也将保留在他们的   地方。

示例输入输出

如果我输入...

5
Hasnain Heickal    Jami
Mir Wasi Ahmed
Tarif Ezaz
     Mahmud Ridwan
Md    Mahbubul Hasan

计算机 应该 输出此...

Case 1: HASNAIN HEICKAL    JAMI
Case 2: MIR WASI AHMED
Case 3: TARIF EZAZ
Case 4:      MAHMUD RIDWAN
Case 5: MD    MAHBUBUL HASAN
  • 请注意,在分号和名称的首字母之间需要一个空格。

我的编码

这是我在 C 中编码的内容:

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

int main(void)
{
    int T, i;
    char string [100];
    scanf("%d", &T);

    for (i=0; i<T; i++) 
    {
        gets(string);
        printf("Case %d: ", i);

        while (string[i])
        {
            putchar (toupper(string[i]));
            i++;
        }          

        printf("\n");
     }  

    getch();
    return 0;
}

现在,此代码无法生成所需的输出。我在哪里做错了?我的语法有什么问题吗?有人可以指导我吗?请记住,我是一名中学生,只是C的初学者。

2 个答案:

答案 0 :(得分:2)

你需要逐个循环遍历字符串的每个字母。

在下面的代码中,我使用变量K完成了这一操作,它从0变为字符串的长度。

变量I会跟踪字符串的数量。

int main(void)
{
  int T, i, k;
  char string [100];

  scanf("%d", &T);

  for ( i = 0; i < T; ++i)
  {
     gets (string);

     for(k=0; k<strlen(string); ++k)
     {
         putchar (toupper(string[k]));
     }
  }  

  getch();
  return 0;
}

回答你的问题:IDEOne Link

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

int main(void)
{
  int T, i,k;
  char string [100];

  scanf("%d ", &T);

  for ( i = 0; i < T; ++i)
  {
     gets (string);
     printf("[%d] : %s\n", i, string);

     for(k=0; k<strlen(string); ++k)
     {
         putchar (toupper(string[k]));
     }
     putchar('\n');
  }  

  return 0;
}

答案 1 :(得分:2)

请根据您的要求查看代码并实施测试用例场景。

nasm