使用strtok分隔单词并删除和()

时间:2018-12-24 15:58:34

标签: c arrays string strtok

我的程序应该采用一个短语并将所有单词分开,然后将它们打印在没有任何',','('或')'的新行中。这是我的代码。到目前为止,它似乎正在工作,但我想尽可能改善它。另外,我也不知道这是否是一个问题,但是它似乎从单个单词中删除了'('和')',但不是两个都删除了。因此,“(test)”或“(test)”仅会按预期输出“ test”,而“(test)”将输出“ test)”。不确定是否可以。.我该如何改善呢?

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

void function(char *string)
{
    const char delim[2] = " ";
    char *token;
    int n, i, j;

    token = strtok(string, delim);
    while (token != NULL) {
        n = strlen(token);
        if (strstr(token, ",")) {
            for (i = j = 0; i < n; i++) {
                if (token[i] != ',')
                    token[j++] = token[i];
            }
            token[j] = '\0';
        }else if (strstr(token, "(")) {
            for (i = j = 0; i < n; i++) {
                if (token[i] != '(')
                    token[j++] = token[i];
            }
            token[j] = '\0';
        } else if (strstr(token, ")")) {
            for (i = j = 0; i < n; i++) {
                if (token[i] != ')')
                    token[j++] = token[i];
            }
            token[j] = '\0';
        }

        printf("%s\n", token);
        token = strtok(NULL, delim);
    }
}

int main(void)
{
    char test[80] = "The next appointment is on the 7.1.2019, 10:00 a.m., in HS 1 (Building C)";
    char input[80];

    gets(input);
    function(test);
    function(input);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以执行以下代码:

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

void function(char *string)
{
    const char delim[10] = " ,()";
    char *token = strtok(string, delim);
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, delim);
    }
}

int main(void)
{
    char test[80] = "The next appointment is on the 7.1.2019, 10:00 a.m., in HS 1 (Building C)";

    function(test);

    return 0;
}

说明:

  

每次对strtok()的调用都会返回一个以空值结尾的字符串的指针          包含下一个标记。此字符串不包含          分隔字节。如果找不到更多标记,strtok()将返回NULL。

请参阅http://man7.org/linux/man-pages/man3/strtok.3.html