【发布时间】:2013-12-31 15:10:21
【问题描述】:
我用 C 编程。我应该创建一个程序来识别字符串中最常见的字符和第二常见的字符。
我不知道为什么,但它不起作用。程序应该把它的位置放入一个整数中。不是指针,但如果最常见的是str1[i],那么它将把i 的值放入一个整数中。所以在第二个最常见的。如果是str1[j],则应该将j 的值放入一个整数中。然后,它应该用第二常见的替换最常见的。替换功能有效,循环中可能存在问题,虽然我无法弄清楚它是什么。
这是我所拥有的(假设所有的整数和字符串都在开头声明):
void stringReplace(char str1[], char ch1, char ch2);
int main()
{
char str1[100];
char ch1, ch2;
int i, j, p, n, len, counter1, counter2, first, second, times;
printf("Please enter the string - maximum = 100 characters:\n");
printf("User input: ");
gets(str1);
len = strlen(str1);
for(i = 0 ; i < len ; i++)
{
counter1 = 0;
for(j = 0 ; j < len ; j++)
{
if(str1[i] == str1[j])
{
counter1++;
}
if(counter1 > counter2)
{
first = i;
}
}
counter2 = counter1;
} //character which shows up most - found.
counter2 = 0;
for(p = 0 ; p < len ; p++)
{
for(n = 0 ; n < len ; n++)
{
if(str1[p] == str1[n])
{
counter1++;
}
if(counter1 < first && counter1 > counter2)
{
second = p;
}
}
counter2 = counter1;
}
ch1 = str1[first];
ch2 = str1[second];
stringReplace(str1, ch1, ch2);
puts(str1);
return 0;
}
void stringReplace(char str1[], char ch1, char ch2)
{
int i, j, len;
len = strlen(str1);
for(i = 0 ; i <= len ; i++)
{
if(str1[i] == ch1)
{
str1[i] = ch2;
}
}
}
问题出在哪里?
【问题讨论】:
-
如果
len是字符串的实际长度,那么一个问题是你的for循环应该有< len而不是<= len。否则,您将遍历len+1字符并处理空终止符(如果有的话)。 -
已完成但仍无法正常工作:(我将编辑整个程序以便您理解 :P
-
正如我在评论中提到的,这只是“一个问题”。可能还有其他人。此外,您并没有解决所有问题。 ;)
-
什么不起作用?程序哪里出错了?程序在哪里正常运行?
-
替换之类的都不错。但是,如果我输入例如“I love you more”(应该输出 I leve yeu mere),那么它会输出“I lov you mor”。