@ljt12138
2018-10-10T22:16:02.000000Z
字数 858
阅读 751
字符串
由于Windows和Linux的系统差异,字符串读入可能出现一些奇怪的问题。下面整理一些字符串读入的小技巧。
当字符串简单的用空格分隔时,直接使用scanf("%s")
是不会出现问题的。但要注意当scanf("%c")
的时候可能会将换行符读入进去,因此当既有字符串读入又有字符读入的时候,推荐将字符读入写成下面介绍的getc
的形式。
读入一行可以用,但这个函数非常容易出现奇怪的问题。例如换行符等情况,因此并不建议使用。
getchar表示读入下一个字符。如果字符集是已知的,例如小写英文字符,那么可以用下面的读入模板读入字符/字符串。其中isalpha
是<cctype>
中的一个函数,表示英文字符。类似的还有:
isdigit
:数字isalnum
:英文字符或数字isupper
:大写英文字符islower
:小写英文字符更多的函数可以参考 https://en.cppreference.com/w/cpp/header/cctype 。另外,也可以手写一个函数来判断是否是合法字母。
读入字符的模板——忽略前面无用的部分,直到读到一个字符:
int getc()
{
int c;
do c = getchar(); while (!isalpha(c));
return c;
}
读入字符串的模板,同理,一直读到不是字符为止:
void get_string(char str[])
{
int c, len = 0;
do c = getchar(); while (!isalpha(c));
while (isalpha(c)) {
str[len++] = c;
c = getchar();
}
str[len] = '\0';
}
类似的,也可以有非负整数的数字的模板:
int read()
{
int a = 0, c;
do c = getchar(); while (!isdigit(c));
while (isdigit(c)) {
a = a*10+c-'0';
c = getchar();
}
return a;
}
其中判断函数可以按照需求修改。