在c中查找数组中的字符

时间:2013-01-24 16:10:46

标签: c arrays

我正在努力寻找如何在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 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分:1)

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

  

strchr()函数应该找到第一次出现的c   (转换为char)在s指向的字符串中。终止   null byte被认为是字符串的一部分。

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

如果返回值不为null(即找到字符),则可以使用以下命令获取索引:

const char* res = strchr(cstr,'A');
int index = cstr-res; //< NOTE: you should check that res != 0

答案 2 :(得分:1)

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

您应该扫描character而不是string

更改您的scanf(),以便您的条件检查if(a[i] == b)正常工作

scanf("%c", &b);

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

return -1;

答案 3 :(得分: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,你得到它的偏移量。