1、scanf("%[^\n]",str)
的用法。
1、 ^
表示“非”,[^\n]
表示读入换行符就结束读入。这是scanf的正则用法,一般情况下scanf是不能接收空格符,已接收到空格就结束读入,所以不能像gets()等函数一样接受一行字符串,所以用[^\n]
就可以读取一行,直到碰到‘\n’才结束读入。
读取一个字符集,以\n作为结束标志
scanf("%[^\n]",str);
2、*
表示该输入项读入后不赋予任何变量,即scanf("%*[^\n]%*c")
表示跳过一行字符串。其中%c可以把\n吸收掉,防止影响后续输入。
#include<iostream>
using namespace std;
int main()
{
char str1[1000] = {0};
char str2[1000] = {0};
char str3[1000] = {0};
char str4[1000] = {0};
scanf("%[^\n]", str1); // 过程1
scanf("%[^#]", str2); // 过程2
scanf("%*[^\n]", str3); // 过程3 加了个*,本句功能相当于scanf("%*[^\n]");因为不会存储任何字符
scanf("%*[^#]", str4); // 过程4 加了个*,本句功能相当于scanf("%*[^#]");因为不会存储任何字符
cout << str1 << str2 << str3 << str4 << endl;
}
输入:
You are my friend
Are you sure?\n#
Are you ok?
Can you speak English?
No, I can't. #
输出:
you are my friend
Are you sure?\n
二、strch的用法
这是C的库函数
原型:char *strchr(const char *str, int c)
作用:在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
下面是示例代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[] = "I love you.cn";
char ch = '.';
char *point;
point = strchr(str, ch);
printf("|%c| 之后的字符串是 - |%s|\n", ch, point);
}
输出结果:
|.| 之后的字符串是 - |.cn|
有人不清楚为啥输出的是 ‘.’ 后面的字符串,请想想printf("%s", str)的原理。
另外,如果没有找到ch这个字符的话(例子里面是’.’),就返回NULL。