在链中只找到1x重复元素?

时间:2013-11-27 20:11:52

标签: c

对我的代码以及使用字符串的一般问题有一些疑问。 所以关于我的代码,用户插入字符串,(例如:ABCDEBCC),它应该只输出重复一次的符号(在这种情况下只有符号“B”,因为C重复2x而休息根本没有重复)。

问题

  1. 添加到我的代码中的内容,以便检查符号是否仅重复1次,此时它只是检查重复的符号,如您所见。
  2. 为什么检查A和a是不同的?
  3. 我应该添加什么,以便检查空格符号?
  4. 使用字符串时,我是否应该使用指针而不是索引?
  5. 代码:

    #define symbol_count 100
    
    int main()
    {
        char text[symbol_count];
        int size;
        int i,j,repSimb,fail;
        printf("String\n\n");
        printf("Insert a string: ");
        gets(text);
        size = strlen(text);
        printf("\nInserted string:    ");
        puts(text);
        for(i=0;i<size; ++i)
        {
            for(j=i+1; j < size; ++j)
            {
                if(text[i]==text[j])
                {
                    printf("Symbols in string that repeat only 1x\n  %c",text[i]);
                }
            }
        }        
        getche();
    }
    

2 个答案:

答案 0 :(得分:0)

显然应该如何处理这个问题。假设你的字符串是 nly 字母,请考虑改为:

#include <ctype.h>
#define NUM_CHARS  ...  /* number of characters (no, I don't remember the exact number :-) */

int counts[NUM_CHARS]

memset(counts, 0, sizeof(counts); /* clear the array */

for (i = 0; i < size; i++) {
    if (!isalpha(line[i]))
        continue;  /* not a letter */

    char c = toupper(line[i]);

    counts[c - 'A']++;
}

/* at this point you have counts for each character, so you can output only ones 
   with count == 2 */

这可以扩展到其他角色类。

答案 1 :(得分:0)

使用toupper使字符变为大写 - 这对于不区分大小写的比较很有用。

对于“只有一个匹配”,您需要计算每个字符并输出该字符。我建议将计数存储在一个数组中,或者如果你觉得它是map(尽管那将是C ++)。