有没有办法将 scanf 的分隔符设置为非字母的任何内容?
我的意思是,假设我有一个来自标准输入的输入:abc123def。从技术上讲,它只是一个字符串,但我想将其视为由非字母(在本例中为 123)分隔的 2 个字符串。
我找到了一种设置自定义分隔符的方法,但在这里,它的范围很广(数字字符、特殊字符、空格、制表符......任何不在 A..Za..z 范围内的东西)。
举个例子,这是我想做的事情:
#include <stdio.h>
int main()
{
char str[100];
while (scanf("%s", str) == 1)
{
printf("%s\n", str);
}
return(0);
}
上面的代码仅使用空格作为分隔符(我认为)。但我希望它使用任何非字母字符作为分隔符。所以当输入是:
Hi12那里..你好
它将输出:
你好
你好
更新:好的,我找到了解决方案。它使用 strtok 函数来完成这项工作,但方式不同。代码如下所示:
#include <stdio.h>
#include <string.h>
int main()
{
int i, len;
char str[100], *word;
while (gets(str))
{
len = strlen(str);
for (i=0; i < len; i++) // Replacing anything non alphabetic with space
{
if ( !(((str[i] >= 'A') && (str[i] <= 'Z')) || ((str[i] >= 'a') && (str[i] <= 'z'))) )
{
str[i] = ' ';
}
}
word = strtok(str, " ");
while (word != NULL)
{
printf("%s\n", word);
word = strtok(NULL, " ");
}
}
return(0);
}
它完成了这项工作,但我想知道我是否可以在从标准输入中获取字符串时直接完成它。
干杯。