要使用字串型態,必需要加入
#include <string>
empty():測試字串是否為空。
用==比較兩個字串是否相同。
且可以使用C-Style的字串指定給string。
string name("caterpillar");
char str[] = "justin";
name = str;
且可以用+運算子來串接字串。
str1 = str2 + str3;
str1 = str2 + "\n";
也可以用[]指定索引來存取相對應位置的字元,就有如字元陣列的操作一般。
assign(string,start,num):從string的第start個字元取出num個字元來指定給另一個字串物件。
append(string,start,num):從string的第start個字元取出num個字元來附加至另一個字串之後。
insert(start,string):將string插入引發insert的字串物件第start個字元之後。
length():傳回字串的長度。
find(string,0):從引發find的字串物件第0個字元尋找是否有符合string的子字串。
#include < iostream>
#include < string>
using namespace std;
int main(){
string s;
cout << "Please input a string include the space:";
getline(cin,s);
cout << "You typed:" << s << endl;
s.find("good",0);
string::size_type loc = s.find("good",0);
if (loc != string::npos){
cout << "In the sentence, there is keyword \"good\" "<< endl;
} else {
cout << "In the sentence, there is no keyword \"good\"" << endl;
}
return 0;
}
如果用cin來輸入的話,是以空白為分隔,
若要輸入中含空白,就必需使用gets。
c是用gets,但是會有問題,最好還是用getline比較好,也一樣可以得到相同的結果哩。
main.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cout << "Please input a string include the space:";
getline(cin,s);
cout << "You typed:" << s << endl;
s.find("good",0);
string::size_type loc = s.find("good",0);
if (loc != string::npos){
cout << "In the sentence, there is keyword \"good\" "<< endl;
} else {
cout << "In the sentence, there is no keyword \"good\"" << endl;
}
return 0;
}
[2008.11.29 補充]
stringstream:可用於基本型態與string型態的轉換
main.cpp
#include <sstream>
#include <iostream>
using namespace std;
int main(){
int index = 5;
string str1;
stringstream sstr;
sstr << index;
sstr >> str1;
cout << "the answer is " << str1 << endl;
return 0;
}
[2008.12.19 補充]
要用string除了要包含string之外,還要用using namespace std;
[2008.12.19 補充]
另外,在C中要把數字轉成字串,可以使用sprintf
例
#include <stdio.h>
int main(){
int a=100;
char b='x';
char c[]="abcd";
char buf[100];
sprintf(buf,"%3d%c%s",a,b,c); // buf是轉換完後的儲存字串
printf("your input is %s\n",buf);
return 0;
}
[2009.03.16 補充]
眾所周知,sprintf不能檢查目標字符串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int ac, char **av)
{
char *str;
int len;
// snprintf(NULL, 0, fmtstring, /* 其它參數 */ );
// 相對於sprintf安全的多
len = snprintf(NULL, 0, "%s %d", *av, ac);
printf("this string has length %d\n", len);
if (!(str = malloc((len + 1) * sizeof(char))))
return EXIT_FAILURE;
// 把後面的變數轉換成字串設定到str指標上
// 而len+1是後面總合長度的上限
// 超過上限的部分會被刪掉,不會印出來
len = snprintf(str, len + 1, "%s %d", *av, ac);
printf("%s %d\n", str, len);
free(str);
return EXIT_SUCCESS;
}
談談snprintf
[2009.03.22 補充]
char *strerror(int errno);
strerror, strerror_r - get error message string
若上一個函數有出現錯誤,會把錯誤號碼存到erron,可以透過strerror來取得代表此錯誤數字的訊息
網址
[2009.04.03 補充]
void perror ( const char * str );
會這把這一個字串列印在stderr,且會在最後面加'\n'的換行字元
int fprintf ( FILE * stream, const char * format, ... );
這是一個非常好用的函式,可以把後面的字串寫入到檔案中
另外有一個特殊用法,就是使用stdout,stderr可以值接設定是要輸出到哪裡
例:
fprintf(stdout,"Hello World!!");
fprintf(stderr,"Hello Error!!");
int vsprintf (char * str, const char * format, va_list arg );
int vsnprintf(char *restrict s, size_t n, const char *restrict format,va_list ap);
可以參考C/C++ : 不定長度引數(Variable-length argument)
參考資料:
C++ Strings
良葛格學習筆記
沒有留言:
張貼留言