【C++】C++字符串和數字的拼接

如果你使用過python,你會發現字符串和int/float/double便捷的拼接方式;但如果你使用C++,可能你每次需要的時候搜索一下才能知道。本文提供兩種簡單的方式來完成這個功能。

本文實例源碼github地址https://github.com/yngzMiao/yngzmiao-blogs/tree/master/2019Q4/20191127


std::to_string()

通過std::to_string()將數字類型轉換成std::string類型,從而可以直接使用+完成字符串的拼接。

# include <iostream>

int main(int argc, char const *argv[])
{
  std::string str = "hello " + std::to_string(1);
  std::cout << str << std::endl;

  return 0;
}

需要注意的是,std::string是C++11纔有的方法,在g++編譯的時候需要指定-std=c++11

編譯並運行這段程序:

yngzmiao@yngzmiao-virtual-machine:~/test$ g++ test.cpp -o test -std=c++11
yngzmiao@yngzmiao-virtual-machine:~/test$ ./test 
hello 1

同時,如果想要轉化爲const char*的類型,可以使用c_str()方法:

std::string str = "hello 1";
str.c_str();

如果想要去除const屬性,需要使用到const_cast

const char* const_char_str = str.c_str();
std::cout << const_char_str << std::endl;

char* char_str = const_cast<char*>(const_char_str);
std::cout << char_str << std::endl;

ostringstream

通過字符串流來完成字符串和數字的拼接,再將字符串流的內容轉化爲std::string的類型。

使用ostringstream之前,需要指定頭文件:

# include <iostream>
# include <sstream>

int main(int argc, char const *argv[])
{
  std::ostringstream oss;
  oss << "hello " << 2;
  std::string str = oss.str();
  std::cout << str << std::endl;

  return 0;
}

編譯並運行這段程序:

yngzmiao@yngzmiao-virtual-machine:~/test$ g++ test.cpp -o test -std=c++11
yngzmiao@yngzmiao-virtual-machine:~/test$ ./test 
hello 2

使用ostringstream,如何來清空內容呢?

oss.str("");

float小數點也可以進行一些格式化:

oss.setf(std::ios::fixed);				//小數定點化
oss.precision(2);						//小數點後2位

需要注意的是,使用小數點的格式化需要在傳入小數之前來完成,否則不會生效。例如:

oss << "hello " << 3.14159265357;
oss.setf(std::ios::fixed);
oss.precision(2);

oss.setf(std::ios::fixed);
oss.precision(2);
oss << "hello " << 3.14159265357;

相比較來說,後者會保留小數點後兩位,而前者不會。


注意點

這兩種方式在linux g++11版本上編譯一般都不會出現問題,但是在Android NDK上編譯,第一種方式可能會出現問題,因此此時建議使用第二種方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章