954,504 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Problem with string search of an array

I am just learning C/C++. My problem is to determine if a character is or isn't within an array then returning an appropriate message to the user. I've only gotten this far using 'strchr' without much success. Any suggestions or help would be appreciated. Should I be using pointers instead within the function?

Thank you

Program Char Search */

#include
#include
#include
char check(char c, char str);

main()

{ char response;
char strg[] = "Array test";
printf("%s\n", strg);

{ Printf("Enter the character you would like to search for.");

Scanf(" %c\n", &response);
}

/*function 'check'*/
{
char check(char str[],char c);
str = strg;
c = response;
scanf("strchr: %s\n",&strg);

if strchr=c
printf("The character is %s\n",c);
}

return 0;
}

cricket
Newbie Poster
2 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

Using strchr it would look something like this.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check(char str[], int search);

int main(void)
{
  char buf[BUFSIZ];
  int ch;

  printf("Enter a string: ");
  fflush(stdout);
  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EXIT_FAILURE;

  printf("Enter a character to search for: ");
  fflush(stdout);
  if ((ch = getchar()) == EOF)
    return EXIT_FAILURE;

  if (check(buf, ch))
    printf("%c was found\n", ch);
  else
    printf("%c was not found\n", ch);

  return EXIT_SUCCESS;
}

int check(char str[], int search)
{
  return strchr(str, search) != NULL;
}

You can also do it manually if you want.

int check(char str[], int search)
{
  int i;

  for (i = 0; str[i] != '\0'; i++) {
    if (search == str[i])
      return 1;
  }

  return 0;
}
Siersan
Light Poster
45 posts since Jan 2005
Reputation Points: 12
Solved Threads: 2
 

Thank you very much. I will try this.

cricket
Newbie Poster
2 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

[QUOTE=Siersan]Using strchr it would look something like this.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check(char str[], int search);

int main(void)
{
  char buf[BUFSIZ];
  int ch;

  printf("Enter a string: ");
  fflush(stdout);
  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EXIT_FAILURE;

  printf("Enter a character to search for: ");
  fflush(stdout);
  if ((ch = getchar()) == EOF)
    return EXIT_FAILURE;

  if (check(buf, ch))
    printf("%c was found\n", ch);
  else
    printf("%c was not found\n", ch);

  return EXIT_SUCCESS;
}

int check(char str[], int search)
{
  return strchr(str, search) != NULL;
}

Just a friendly note:
fgets() will append a \n to the string, if you then just press enter at the character search prompt you will find the \n. The answer will be: was found

vegaseat
DaniWeb's Hypocrite
Moderator
5,989 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,417
 

>if you then just press enter at the character search prompt you will find the \n.
That's reasonable (and expected) behavior. Let's say you want to test for exceptionally long lines:

while (fgets(buffer, sizeof buffer, stdin) != NULL && !check(buffer, '\n')) {
  /* Append buffer to a dynamic string */
}

If you don't want to find the newline, then remove it before the test, or verify the value of the search character as being neither EOF nor '\n'.

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 
>if you then just press enter at the character search prompt you will find the \n. That's reasonable (and expected) behavior.


No argument with that! It's the result telling me that an invisible character was found that can be confusing to the user.

vegaseat
DaniWeb's Hypocrite
Moderator
5,989 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,417
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You