我有字符串 str
char *str = "100.10b.100.100";
Run Code Online (Sandbox Code Playgroud)
我想计算'.'
in 的出现次数str
,最好是单行.(如果可能没有循环)
我的方法是标准strchr
:
int i = 0;
char *pch=strchr(str,'.');
while (pch!=NULL) {
i++;
pch=strchr(pch+1,'.');
}
Run Code Online (Sandbox Code Playgroud)
R..*_*R.. 75
这是我做的方式(需要的变量数量最少):
for (i=0; s[i]; s[i]=='.' ? i++ : *s++);
Run Code Online (Sandbox Code Playgroud)
tva*_*son 23
看,妈,没有循环.
int c = countChars( s, '.' );
int countChars( char* s, char c )
{
return *s == '\0'
? 0
: countChars( s + 1, c ) + (*s == c);
}
Run Code Online (Sandbox Code Playgroud)
但是,我实际上使用了一个循环,因为这是正确的控制结构.
Mic*_*l J 22
好的,非循环实现(是的,它意味着一个笑话).
size_t CountChars(const char *s, char c)
{
size_t nCount=0;
if (s[0])
{
nCount += ( s[0]==c);
if (s[1])
{
nCount += ( s[1]==c);
if (s[2])
{
nCount += ( s[2]==c);
if (s[3])
{
nCount += ( s[3]==c);
if (s[4])
{
nCount += ( s[4]==c);
if (s[5])
{
nCount += ( s[5]==c);
if (s[6])
{
nCount += ( s[6]==c);
if (s[7])
{
nCount += ( s[7]==c);
if (s[8])
{
nCount += ( s[8]==c);
if (s[9])
{
nCount += ( s[9]==c);
if (s[10])
{
/* too long */
assert(0);
}
}
}
}
}
}
}
}
}
}
}
return nCount;
}
Run Code Online (Sandbox Code Playgroud)
Fab*_*sen 11
没有循环会很难,因为没有标准的C库函数可以做到这一点,你需要查看所有字符:)
我会采取明显的解决方案:
int i, count;
for (i=0, count=0; str[i]; i++)
count += (str[i] == '.');
Run Code Online (Sandbox Code Playgroud)
如果你有必要,请随意将两行实际代码压缩成一行:)
我仍然把它放在一个函数中,参数化源字符串和要搜索的字符.
int count_characters(const char *str, char character)
{
const char *p = str;
int count = 0;
do {
if (*p == character)
count++;
} while (*(p++));
return count;
}
Run Code Online (Sandbox Code Playgroud)
如果您热衷于单线(好吧,两线):
size_t count = 0;
while(*str) if (*str++ == '.') ++count;
Run Code Online (Sandbox Code Playgroud)