-1

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

例如:(之前)

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

4 回答 4

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

并替换所有出现的26byALPHABETSIZE

于 2013-09-23T13:34:39.347 回答
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,因为字符串常量必须稍后修改...

于 2013-09-23T13:31:36.923 回答
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
}

或者我在这里有什么问题吗?

于 2013-09-23T13:39:18.640 回答
0

您正在做一些事情来让自己变得困难。

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

您对“j”的值未初始化,因此“j--”将是未定义的

保持所有类型相同并使数组成为“char”数组而不是“int”数组可能会更好。

从数组中删除一个元素“int alphabet[26];” 将非常困难,将其作为“字符串”练习可能会更容易。你真正能做的就是写一个“空白”信

alphabet[j] = ' ';

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

于 2013-09-23T13:41:32.457 回答