【问题标题】:Duplicating strchr()复制 strchr()
【发布时间】:2016-04-22 02:30:09
【问题描述】:

我对 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;
}

【问题讨论】:

  • 请,请缩进您的代码!
  • 我对这个还是比较陌生,但我会在未来尽力而为!
  • 是的,这比它需要的要难得多:)

标签: c arrays string pointers


【解决方案1】:

使用

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

【讨论】:

  • 啊。那现在打印半正确。现在我只需要不打印这么多空格。
  • 该死的你打败了我! ;)
【解决方案2】:

感谢潘若尘,我的代码现在可以正常运行了。这里是:

#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;
}

【讨论】:

  • 作为一个注释,传统上将p 用作指针,而不是temp。 (例如,char *p = array;for (; *p; p++) 与您对 for(temp=array;*temp!='\0';temp++) 所做的事情相同。另外,请注意,您可以将 array 传递为 char occur (char *array, char c)。数组语法没有问题(例如 occur (char array[], ...,但是当数组作为函数参数传递时的实际效果,它被转换为指针。
【解决方案3】:

让你的 for 语句像这样:

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

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

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

temp=array+i 部分只运行一次,因此 temp 的值永远不会改变,即使 i 会改变。在我的示例中,首先将temp 设置为array,因此部分:

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

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

... temp++ ...

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

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

给你!

【讨论】:

  • 谢谢!这就是我最终做的。我花了一秒钟才意识到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2015-09-22
  • 1970-01-01
  • 2016-05-14
  • 2011-05-04
相关资源
最近更新 更多