0

我正在努力寻找如何在 char[20] 中打印字符的位置。谁能帮我?

int emfanisi(char a[])
{
    int i, mikos;
    char b;

    printf("Dose xaraktira\n");
    scanf("%s", b);
    mikos = strlen(a);
    for(i=0; i<mikos; i++)
    {
        if(a[i] == b)
            return i;
        break;
    }
}
4

4 回答 4

3

问题是如果 char 在第一次迭代中不匹配,循环就会中断。更改如下。

附带说明一下,已经有一个函数可以在字符串中定位字符: strchr(str,char)

代码:

int emfanisi(char a[])
{
    int i, mikos;
    char b;

    printf("Dose xaraktira\n");
    scanf("%c", &b);
    mikos = strlen(a);
    for(i=0; i<mikos; i++)
    {
        if(a[i] == b)
            return i;
    }
    return -1; //Indicate doesn't found.
}
于 2013-01-24T16:16:59.697 回答
1

你可以使用 strchr 函数来做你想做的事。

strchr() 函数应在 s 指向的字符串中定位第一次出现的 c(转换为字符)。终止的空字节被认为是字符串的一部分。

http://pubs.opengroup.org/onlinepubs/009695399/functions/strchr.html

如果返回值不为空(即找到字符),您可以使用以下方法获取索引:

const char* res = strchr(cstr,'A');
int index = cstr-res; //< NOTE: you should check that res != 0
于 2013-01-24T16:12:33.390 回答
1

您正在尝试搜索字符串中的字符并返回数组中的位置(如果它存在于数组中)。

你应该扫描character而不是string

像这样更改您的 scanf() 以便您的条件检查if(a[i] == b)有效

scanf("%c", &b);

并在字符串中找不到字符时包含错误条件。在 for 循环之后返回不会发生在 for 循环中。

return -1;
于 2013-01-24T16:24:02.353 回答
0

那应该做你想要的:

const char * pos = strchr(your_string, character_you_search_for);
if(!pos)
  printf("not found\n");
else
  printf("position is : %d\n", pos - your_string);

strchr 返回指向第一次出现的字符的指针,因此通过从中减去 your_string 得到它的偏移量。

于 2013-01-24T16:14:03.253 回答