我有一系列像这样的字符:
#define SIZE 4096
char array[SIZE];
fgets(array, SIZE, stdin);
我想删除任何标点符号,例如('),以便数组元素为:
不知道
而不是
d o n t t t t t
我如何制作一个不包含标点字符的新数组?
答案 0 :(得分:2)
只需复制新数组,避免使用标点符号,并在输出数组的末尾添加null
终结符:
int main()
{
char punctuation[] = { '.', '?', '!', ':', ';',
'-', '(', ')', '[', ']',
',', '"', '/'};
char input[SIZE], output[SIZE];
int i, j, k, ch, flag;
i = j = k = flag = 0;
/* get the input string from the user */
printf("Enter your input string:");
fgets(input, SIZE, stdin);
input[strlen(input) - 1] = '\0';
/* copy characters other than punctuations */
while (input[i] != '\0')
{
flag = 0;
ch = input[i];
for (j = 0; j < sizeof(punctuation); j++)
{
if (ch == punctuation[j])
{
flag = 1;
break;
}
}
if (!flag)
{
output[k++] = input[i];
}
i++;
}
output[k] = '\0';
/* print the resultant string */
printf("Resultant String: %s\n", output);
return 0;
}
您可以根据需要增加/减少punctuation
数组大小。默认的C语言环境将这些字符分类为标点符号:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
在C中还有一个默认函数ispunct
:
int main()
{
int i;
printf("All punctuation characters in C"
" programming are: \n");
for (i = 0; i <= 255; ++i)
if (ispunct(i) != 0)
printf("%c ", i);
return 0;
}
答案 1 :(得分:-2)
#define SIZE 4096
char array[SIZE];
char result[SIZE];
fgets(array, SIZE, stdin);
for(int i=0; array[i]; i++)
{
char a;
a = array[i];
if((a > 0x20) && (a < 0x2f))
continue;
else
result[i] = a;
}
result[i] = '/0';