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