C/C++中输入带空格的字符串 string 转 char*
在C和C++中,用普通的方法輸入帶空格的字符串時,得不到后續(xù)的數(shù)據(jù)。想要在字符串中包含空格可以使用以下方法:
(1)使用正則表達式
scanf("%[^\n]]",str); //接收帶空格的字符串 scanf("%[a-z A-Z 0-9]",str) //表示只匹配輸入是大小寫字母和數(shù)字。(2)在C中使用gets();或fgets();
在Linux下使用gets()會出現(xiàn)如下警告,因為Linux下gcc編譯器不支持這個函數(shù),解決辦法是使用fgets()。
fgets()函數(shù)的用法:
fgets(char *s, int size, FILE *stream);#include <stdio.h>int main() {char a[20];char b[20];char c;scanf("%[^\n]]", a);printf("%s\n", a); c = getchar();fgets(b, 20, stdin);fputs(b, stdout);return 0; }(3)在C++中使用getline(cin, string str);(該函數(shù)需要包含#include <string>)
(4)在C++中使用cin.getline(char *str, int number);(字符串的長度為number-1)
(5)在C++中使用cin.get();
#include <iostream> #include <string> using namespace std;int main() {string s1,str = "Asd123";char p[40];cin.getline(p, 20);cout << "[1]:" << p <<endl;getline(cin, s1);cout << "[2]:" << s1 <<endl;cin.get(p, 40);cout << "[3]:" << p <<endl;return 0; }?
在C++中要將string轉(zhuǎn)化為char*或const char*可以用以下方法:
①強轉(zhuǎn)(只適用于以下形式)
char *p = (char*)"Asd";②const char *c_str();
string str = "Asd"; const char *p = str.c_str(); 注意c_str函數(shù)的返回值是const char*③data();
string str = "Asd"; const char *p = str.data(); data()與c_str()類似,但是返回的數(shù)組不以空字符終止。④copy(p, len, start);
string s1 = "asdqwezxc"; char p[20]; s1.copy(p, 5, 0); *(p+5) = '\n';綜合實例:
#include <iostream> #include <string> #include <stdio.h> using namespace std;int main() {char *p1 = (char*)"Asd";const char *p2;char a[20];const string s1 = "Asd123";printf("[1]:%s\n", p1);p2 = s1.c_str();printf("[2]:%s\n", p2);p2 = s1.data();printf("[3]:%s\n", p2);s1.copy(a, 5, 0);*(a+5) = '\0';cout << "[4]:" << a;return 0; }c_str()函數(shù)返回一個指向C字符串的指針,內(nèi)容與本string串相同。這是為了與C語言兼容,因為在C語言中沒有string類型,故必須通過string類對象的成員函數(shù)c_str()把string對象轉(zhuǎn)換成C中的字符串樣式。
注意:使用c_str()帶來的小問題
const char* c[]; std::string s = "1234"; c = s.c_str(); std::cout << c << std::endl; //輸出:1234 s = "abcd"; std::cout << c << std::endl; //輸出:abcd解決的辦法
char* c = new char; std::string s = "1234"; //char *strcpy(char* dest, const char *src); strcpy(c, s.c_str()); std::cout << c << std::endl; //輸出:1234 s = "abcd"; std::cout << c << std::endl; //輸出:1234?
順便提一下,const_cast用于取出const屬性,把const類型的指針變?yōu)榉莄onst類型的指針,如下:
const int *fun(int x, int y){} int *p = const_cast<int*>(fun(1,2));將const char*轉(zhuǎn)化為char*示例:
#include <iostream> #include <stdio.h> #include <string> using namespace std;int main() {string str = "Asd";const char *p = str.data();char *q = const_cast<char*>(p);printf("%s\n", q);return 0; }獲取string長度的方法:
#include <iostream> #include <stdio.h> #include <string.h> #include <string>using namespace std; int main() {const char *p2;string str = "String Asd";cout << "str.length():" <<str.length() << endl;cout << "str.size():" <<str.size() << endl;p2 = str.c_str();printf("strlen:%d\n", strlen(p2));return 0; }?
總結(jié)
以上是生活随笔為你收集整理的C/C++中输入带空格的字符串 string 转 char*的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链技术指南笔记(三):区块链运作的核
- 下一篇: C++学习笔记:(九)输入/输出流