【发布时间】:2018-12-24 15:58:34
【问题描述】:
我的程序应该使用一个短语并分隔所有单词并将它们打印在没有任何',','('或')'的新行上。这是我的代码。到目前为止,它似乎正在工作,但如果可能的话,我想改进它。另外,我不知道这是否是一个问题,但它似乎从一个单词中删除了 '(' 和 ')' 但不是两者都删除了。因此,“(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;
}
【问题讨论】:
-
只有在没有找到
(时才检查)。这没有任何意义。您应该检查每个字符,只要找到任何字符。