gpt4 book ai didi

c - 使用 strchr() 计算字符串中字符的出现次数

转载 作者:行者123 更新时间:2023-12-04 07:04:09 25 4
gpt4 key购买 nike

我的学期快结束了,我正在写一个函数来查找字符串中某个字符的编号,给定老师分配的函数原型(prototype)。我知道我一定是在做一些愚蠢的事情,但是这段代码要么被锁定,要么在我的函数中无限循环。

这是一项任务,所以我不是在寻找任何人为我做作业,而只是指出我错在哪里以及为什么,以便我了解如何解决它。如果您愿意提供任何帮助,我将不胜感激。

这是我写的代码:

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

int charCounter(char* pString, char c);

int main(void)
{
char* inpString = "Thequickbrownfoxjumpedoverthelazydog.";
int charToCount;
int eCount;

eCount = 0;
charToCount = 'e';
eCount = charCounter(inpString, charToCount);
printf("\nThe letter %c was found %d times.", charToCount, eCount);

return 0;
} // end main

int charCounter(char* pString, char c)
{
int count = 0;
char* pTemp;

do
{
pTemp = strchr(pString, c);
count++;
}
while(pTemp != NULL);

return count;
} // end countCharacter

最佳答案

您的循环总是从 pString 的开头查找,并且总是一遍又一遍地找到第一个 'e'。

如果您声明 char* pTemp = pString; 那么您可以进行一些不同的迭代(我之前粘贴了错误的版本,抱歉!):

char* pTemp = pString;

while(pTemp != NULL)
{
pTemp = strchr(pTemp, c);
if( pTemp ) {
pTemp++;
count++;
}
}

这会强制 pTemp 在查找下一个字符之前指向刚刚找到的字符之后。

这样做会更容易:

char* pTemp = pString;
while( *pTemp )
if( *pTemp++ == c) count++;

好的,经过考虑,即使您已经完成了这项工作,我还是将内部循环更改为我更满意的形式:

while( (pTemp = strchr(pTemp, c)) != NULL) {                                                                                                                       
count++;
pTemp++;
}

关于c - 使用 strchr() 计算字符串中字符的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com