找到字符c在字符串中的第一个位置
这是我的函数代码
int char_index(int c, char *string) {
int flag = 0;
int i = 0;
int index = 0;
for(i = 0; string[i] != '\0'; i++){
if (string[i] == c){
flag++;
}
if (flag == 0){
index = NOT_IN_STRING;
}
else {
index = i+1;
}
}
return index;
}
该函数应返回字符的位置,如果字符不存在,则返回应为:NOT_IN_STRING
答案 0 :(得分:2)
即使在字符串中找到目标字符,也不要中断循环。因此,字符串的长度将作为目标字符的索引返回。
函数最好返回类型为size_t
而不是int
的对象。
函数声明应该像
size_t char_index( const char *s, char c );
即指针应具有限定符const
,因为该字符串在函数内部未更改。
请注意,C标准几乎包含了类似声明的函数strchr
char * strchr( const char *s, char c );
这里是一个演示程序,显示了如何实现该功能。
#include <stdio.h>
#define NOT_IN_STRING ( size_t )-1
size_t char_index( const char *s, char c )
{
size_t i = 0;
while ( s[i] != '\0' && s[i] != c ) ++i;
return s[i] != '\0' ? i : NOT_IN_STRING;
}
int main( void )
{
const char *s = "Betty";
for ( size_t i = 0; s[i] != '\0'; i++ )
{
printf( "%c: %zu\n", s[i], char_index( s, s[i] ) );
}
}
程序输出为
B: 0
e: 1
t: 2
t: 2
y: 4
所示功能从搜索中排除了终止零。如果要在搜索中包含终止零,则只需按照以下方式更改函数的return语句
return s[i] == c ? i : NOT_IN_STRING;
答案 1 :(得分:0)
考虑使用标准库中的char *strchr(const char *string, int c);
。
无论如何,该功能应该以这种方式完成:
int char_index(char c, char *string) {
for (int i = 0; string[i] != '\0'; i++)
if (string[i] == c)
return i;
return NOT_IN_STRING;
}
答案 2 :(得分:0)
不要使用所有这些索引。太难读了。
/* Find first occurence of a character in a string. */
#include <stdio.h>
#define NOT_IN_STRING -1
int
char_index(int c, const char *string)
{
const char *start = string;
while( *string != c && *string ) {
string++;
}
return ( *string == c) ? string - start : NOT_IN_STRING;
}
int
main(int argc, char **argv)
{
const char *needle = argc > 1 ? argv[1] : "";
const char *haystack = argc > 2 ? argv[2] : "abcdefgh";
printf("Target string: %s\n", haystack);
while(*needle) {
printf("\t%c: %d\n", *needle, char_index((int)*needle, haystack));
needle += 1;
}
return 0;
}
答案 3 :(得分:0)
这里您还有另一个选择:
int instring(int c, const char *str)
{
int result = NOT_IN_STRING;
const char savedstr = str;
while(*str)
{
if(*str == c)
{
result = str - savedstr;
break;
}
str++;
}
return result;
}
答案 4 :(得分:0)
此代码中的问题对。
首先是标志,如果在字符串中找到字符,那么flag++
,但是当字符在字符串中多次出现时会发生什么呢?该标志将为2,3等。这样,您将只有该字符在字符串中的最后一个索引。要解决此问题,请添加到for循环str[i] && !flag
中。另外,您还要检查char是否等于int且不进行任何强制转换(str[i] == c
),方法是通过函数atoi()或常规的简单强制转换来更改它。
祝好运!
詹姆斯