输入一个字母,然后减去字母表

时间:2013-09-23 13:24:49

标签: c

我正在制作一个程序,如果你输入一封信,就会从列表中丢弃一封信,任何人都可以帮助我。感谢。

示例: (BEFORE)

ABCDEFGHIJKLMNOPQRSTUVWXYZ 输入一封信:A

(输入'A'字母后)

_BCDEFGHIJKLMNOPQRSTUVWXYZ 输入一封信:

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

int main()
{
    int alphabet[26];
    char letter;
    int i;
    int j;

    alphabet[0] = 'A';
    for(i = 0;i < 26; i++)
    {
        alphabet[i] = alphabet[0];
        printf ("%c", alphabet[i], alphabet[i]);
        alphabet[0]++;
    }

        printf("\n\nenter the letter you want to remove in the alphabet: ");
        scanf("%c", letter);

        while(j<alphabet[i])
        {
            if(letter==alphabet[i])
            {
                j--;
            }
        }
}

问题是当我输入要删除的字母时,它不会删除字母表中的字母。请帮忙。感谢。

编辑:最后一件事,我怎么才能让它只有一个输入?,我的意思是如果我在第二次输入相同的字母,它会说“你已经输入了那封信”。

4 个答案:

答案 0 :(得分:1)

你假设这些字母是连续的,就像在ASCII中一样,但你不能假设在 C 中。

下一行有一个重复的参数:

   printf ("%c", alphabet[i], alphabet[i]);

删除最后一个alphabet[i]

你的上一个if()句子错了:必须用==完成比较。

根本不清楚你想做什么。

编辑:

我会以这种方式做这个程序:

#include <stdio.h>

int main()
{
    char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    char letter;

    printf("Choose a letter: ");
    letter = getchar();

    printf("\n\n");

    for(int i = 0; i < 26; i++)
      if (letter == alphabet[i]) 
         {
            alphabet[i] = '_';
            break;   /* This terminates the for() loop */
         }        

     printf("Result: %s \n", alphabet);
}  

EDIT2:我已经更改了alphabet的声明,因为字符串常量必须稍后修改...

答案 1 :(得分:1)

使用声明

将值分配给letter
letter=alphabet[i]

此声明始终为真,除非alphabet[i]0

使用比较

letter==alphabet[i]

你的while循环也有点奇怪,因为j的值在开头是未定义的,所以你的比较将是未定义的。

   while(j<alphabet[i])
    {
        if(letter=alphabet[i])
        {
            j--;
        }

可能你只想做类似的事情:

   for(i = 0;i < 26; i++) {
      if(alphabeth[i]==letter) {
          alphabeth[i]='_';
      }
   }

如果您只想替换字母的第一个出现,请在break;之后插入alphabeth[i]='_';

你可能不希望在你的源代码中多次出现像“26”这样的神奇值。

改为使用像

这样的东西
 #define ALPHABETSIZE 26

并将所有26的出现替换为ALPHABETSIZE

答案 2 :(得分:0)

如果我找对了你想要通过你的数组并检查输入的字符是否与数组中的任何字符匹配。

有什么理由,为什么你不使用像这样的for循环并将数组位置设置为0而不是while语句?

for(i=0;i<26;i++)
{
   if(letter == alphabet[i]) 
      alphabet[i] = "_"; // or setting it to 0 if you use and int-array
}

或者我在这里弄错了什么?

答案 3 :(得分:0)

这里有一些你正在做的事情让你自己很难。

您需要使用“==”而不是“=”来比较两个变量

“j”的值未初始化,因此“j--”未定义

最好保持所有类型相同,并使数组成为“char”数组,而不是“int”数组。

从数组中删除元素“int alphabet [26];”会非常困难,这可能更容易使这个“字符串”练习。你所能做的就是通过

制作一个“空白”字母
alphabet[j] = ' ';

如果你能更清楚地解释你的要求,我认为有可能做出更好的设计:)