0

我有一个接受一些值作为char array[]参数的函数。

这些值用分号 ( ';') 分隔。

例如:"hello;dear;John"

所以我试图找出一种方法strtok来删除最后一个字符串,它"John"在最后一个分号之后。

int remove(char lastName[]){


}

*更加具体

我创建了这个函数,它删除用分号分隔的值:

int remove(char variable_Name[]){

        char *value_toRemove = getenv(variable_Name);
        char last_semicolon[] = ";";
        char *result = NULL;
        result = strtok( value_toRemove, last_semicolon );
        while( result != NULL ) {
        result = strtok( NULL, last_semicolon );
        }
        return NULL;    
}

但是该函数在找到分号后会删除所有内容。

4

2 回答 2

2

strrchr将找到字符的最后一次出现。

或者,如果您不介意修改原始字符串,那么它应该很简单

int remove(char *lastName){
   char *pos = strrchr(lastName, ';');
   if (pos) {
      *pos = 0;
      return pos-lastName;
   }
   return 0;
}

手册页在这里

于 2011-11-06T02:14:25.470 回答
2
char *last_semi = strrchr(lastName, ';');

if (last_semi != NULL)
   *last_semi = '\0';

编辑:响应您的评论,它确实有效。我就是这样做的,我已经包含了整个程序来显示输出示例:

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

char *remove_end(char *str, char c)
{
   char *last_pos = strrchr(str, c);

   if (last_pos != NULL) {
      *last_pos = '\0';
      return last_pos + 1; /* pointer to the removed part of the string */
   }

   return NULL;  /* c wasn't found in the string */
}

int main(void)
{
   char s1[] = "hello;dear;John";
   char s2[] = "nothing to remove";
   char *removed;

   /* s1 */
   printf("Original string: %s\n", s1);
   removed = remove_end(s1, ';');
   printf("New string: %s\n", s1);
   printf("Removed: %s\n", removed ? removed : "NOTHING");
   /* s2 */
   printf("Original string: %s\n", s2);
   removed = remove_end(s2, ';');
   printf("New string: %s\n", s2);
   printf("Removed: %s\n", removed ? removed : "NOTHING");

   return 0;
}

输出:

Original string: hello;dear;John
New string: hello;dear
Removed: John
Original string: nothing to remove
New string: nothing to remove
Removed: NOTHING

你也可以在这里现场试一试。

于 2011-11-06T02:16:08.887 回答