复制strchr()

时间:2016-04-22 02:30:09

标签: c arrays string pointers

我对C很陌生,因为我只把它作为入门课程,而且我遇到了家庭作业问题。该程序的目标是将字符串类型的数组名称和动态选择的字符从循环传递给函数。该函数必须检查所选字符的字符串,如果找到则返回指向字符串中字符的指针。如果未找到该字符,则应返回NULL指针。我的代码卡在字符串的第一个字符的无限循环中......

#include<stdio.h>

char occur(char array[],char c);

int main(void){
    char array[]="Hello World!";
    int i = 33;
    char c;
    char occurence;

    for(i=33;i<=126;i++){
        c = i;
        occurence=occur(array,c);
        printf("%c\n",occurence);
    }

    return 0;
}

char occur(char array[], char c){
    int i = 0;
    char *temp=array;

    for(temp=array+i;*temp!='\0';i++){
        if(c==array[i]){
            return *temp;
        }
        else{}
    }

    return 0;
}

3 个答案:

答案 0 :(得分:0)

使用

for(temp=array; *temp!='\0'; temp++){
   if(c==*temp) {
   ...

答案 1 :(得分:0)

像你这样声明你的陈述:

for (char* temp = array; *temp != '\0'; temp++) {
    if (*temp == c) {
        return temp;
    }
}

然后删除前两行。 我将解释你的功能有什么问题。在该行:

for(temp=array+i;*temp!='\0';i++){     

temp=array+i部分只运行一次,因此临时值永远不会改变,即使i确实如此。在我的示例中,第一个temp设置为array,因此部分:

... char* temp = array; ...

temp指向下一个char每个循环:

... temp++ ...

如果循环看到空字符,则循环停止:

... *temp != '\0' ...

你去吧!

答案 2 :(得分:0)

感谢Pan Ruochen我的代码现在正确运行。这是:

#include<stdio.h>
char occur(char array[],char c);
int main(void){
    char array[]="Hello World!";
    int i = 33;
    char c;
    char occurence;
    for(i=33;i<=126;i++){
        c = i;
        occurence=occur(array,c);
        if(occurence==0){}
        else{
            printf("%c\n",occurence);
        }}
    return 0;
}
char occur(char array[], char c){
    char *temp=array;
    for(temp=array;*temp!='\0';temp++){
        if(c==*temp){
        return *temp;
        }
    else{}
    }
return 0;
}