How can I write my own version of the C standard function strspn?

  • Thread starter Thread starter James889
  • Start date Start date
  • Tags Tags
    Function Standard
Click For Summary
To write a custom version of the C standard function strspn, the implementation must count the number of characters in str2 that exist in str1. The provided code fails because the counter 'n' is not initialized and the pointer 'k' is not reset after each iteration of 's'. Additionally, there is confusion about whether strspn should count unique characters or total occurrences, with suggestions to modify the function to return only unique matches. The discussion highlights the importance of correctly managing pointers and initializing variables for accurate results. Overall, the goal is to create a function that behaves similarly to the standard strspn while addressing these issues.
James889
Messages
190
Reaction score
1
Hi,

im trying to write my own version of the C standard function strspn.

It returns the number of characters in str2 that exists in str1.

I cannot get mine to work.

Code:
#include <stdio.h>
#include <stdlib.h>

int strspn(const char *str1, const char *str2){

int n;
const char *s,*k;
s = str1;
k = str2;

while(*s++ != '\0'){
   for(; *k++ != '\0';){
     
if(*s == *k)
n++;
}
}
           
return n;                     
}

if i try it with something like strspn("1214bk","1214"), it returns 16386...
:(
 
Physics news on Phys.org
Well, for starters you never initialize the counter n. Secondly, you need to "reset" k (i.e. make k point to str2) when s is incremented. Also, if the two strings for e.g. "asd" and "asdasd", then should strprn return 3 or 6? I.e., does it only see if the letters exist, and not how many times? In your example, it returns 6.

It could be a good exercise to implement a method, such that it only counts the number of letters occurring in both words, and not how many times (i.e. so it returns 3, and not 6).
 
Last edited:

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 21 ·
Replies
21
Views
4K
  • · Replies 24 ·
Replies
24
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 5 ·
Replies
5
Views
4K
Replies
7
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K