# 字符串的读入与输出 ## 一、$scanf$函数使用 ### 1、不带空格的字符串  ```cpp {.line-numbers} #include #include using namespace std; int main(){ char a[110]; scanf("%s",a); printf("%d\n",strlen(a)); for(int i=0;i #include using namespace std; int main(){ char a[110]; scanf("%[^\n]%*c",a); //利用正则表达式一直读取到\n为止,并且清除最后一个缓冲 printf("%d",strlen(a)); return 0; } ``` ## 二、$sscanf$函数使用 ### 1、按字符串规定格式读取 #### 【整数】 ```cpp {.line-numbers} #include using namespace std; int main() { int year, month, day; int cnt = sscanf("20191103", "%04d%02d%02d", &year, &month, &day); printf("cnt=%d, year=%d, month=%d, day=%d\n", cnt, year, month, day); return 0; } ``` #### 【浮点数】 ```cpp {.line-numbers} #include using namespace std; int main() { double longitude, latitude; int cnt = sscanf("113.123456789 31.123456789", "%lf %lf", &longitude, &latitude); printf("cnt=%d, longitude=%.9lf, latitude=%.2lf\n", cnt, longitude, latitude); return 0; } ``` ### 2、读取部分内容 #### 读取数字 ```cpp {.line-numbers} #include using namespace std; int main() { char str[32] = ""; // 31表示共32个字符,最后一位留给\0 sscanf("123456abcdedf", "%31[0-9]", str); printf("str=%s\n", str); //输出123456 return 0; } ``` #### 读取数字+字符串 ```cpp {.line-numbers} #include using namespace std; int main() { char str[32] = ""; int ret = sscanf("123456abcdedf", "%31[0-9a-z]", str); printf("res=%d str=%s\n", ret, str); return 0; } ``` #### 不要指定内容 ```cpp {.line-numbers} #include using namespace std; int main() { char str[32]; sscanf("123456abcdedf", "%31[^a-z]", str); printf("str=%s\n", str); return 0; } ``` ## 三、$sprintf$函数使用 ### 拼接字符串 ```cpp {.line-numbers} #include using namespace std; const double PI = 3.1415926; int main() { char str[80]; sprintf(str, "Pi= %lf", PI); puts(str); return (0); } ``` #### 其它常见用法 ```cpp {.line-numbers} //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" //可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" //当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567" //也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐 sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐 ```