将int、char型字符转换为String

string

string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:

#include <string>

接下來要宣告一个字串变量,可以写成:

string s;

我们也可以在宣告的同时让它设成某个字串:

string s="TCGS";

而要取得其中某一個字元,和传统C 的字串一樣是用 s[i] 的方式取得。比较不一樣的是如果 s 有三個字元,傳統 C 的字串的 s[3] 是 0 字元,但是 C++ 的 string 則是只到 s[2] 这個字元而已。

下面我们把 string 與 字元陣列的語法做一個對照:

操作string字元陣列
宣告字串string s;char s[100];
取得第 i 個字元s[i]s[i]
字串長度s.length()
或 s.size()
strlen(s)
读取一行getline(cin, s);gets(s);
设成某字串s="TCGS";strcpy(s, "TCGS");
字串相加s=s+"TCGS";
s+="TCGS"
strcat(s, "TCGS");
字串比较s=="TCGS"strcmp(s, "TCGS")

从上面的表格,我們可以发现 string 的用法比较直观,因此如果沒有特別的需要,尽量使用 string 會比較方便。

 

int 转换为Srting、String转为int

方法一:

itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。

功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi

 

char*itoa(intvalue,char*string,intradix);

 

int value 被转换的 整数 ,char *string 转换后储存的 字符 数组 ,int radix 转换进制数,如2,8,10,16 进制
头文件: <stdlib.h>程序例:
<span style="font-size:18px;">#include <iostream>
#include <stdlib.h>
using namespace std;

void main()
{
	int n=1234;
	char str[25];
	itoa(n,str,10);
	cout<<str<<" ";
	int m=atoi(str);
	cout<<m;
}
</span>

方法二

stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostreamfstream 有类似的操作方式。要使用 stringstream, 必須先加入這一行:

<span style="font-size:18px;">#include <sstream></span>

stringstream 主要是用在將一個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一开始的內容,例如:

<p> </p><p>#include <iostream>
#include <stdlib.h>
#include <string>
#include <sstream>
using namespace std;</p><p>void main()
{
 string s;
 stringstream ss(s),stream;
 ss.clear();
 int a=0, b=10, c=6;
 ss<< a << b <<c;
 s=ss.str();//int 转换为String
 cout<<s<<" ";
 int n=0;
 stream<<s;
 stream>>n;//String 转换为int
 cout<<n;
}</p><p><span style="font-size:18px;">下面我們看到一個使用 <span style="color:#00cc;">stringstream</span> 的例子:</span></p>

題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來。

輸入:

3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999

輸出:

6
251
4995

程序如下:

#include <iostream>
#include <stdlib.h>
#include <string>
#include <sstream>
using namespace std;

void main()
{
	string s;
	stringstream ss;
	int n, i, sum, a;
	cin >> n;//共有n行
	getline(cin, s); // 讀取換行
	for (i=0; i<n; i++)
	{
		getline(cin, s);
		ss.clear();
		ss.str(s);
		sum=0;
		while (1)
		{
			ss >> a;//将String转换为int
			if ( ss.fail() ) break;
			sum+=a;
		}
		cout << sum << endl;
	}
}

结果如下:

string类型是c语言中char *类型的一种更便利的实现。使用这个类型,不用再去刻意考虑内存的事儿。在做快速开发的时候,string对象提供的便利,还是相当出色的。然而,在这儿提醒一下:string类型很有可能成为一个工程效率问题的根源,产品级别的应用当中,应该尽量避免在深层循环嵌套中使用string类型
    除size()外,另外两个string常用的方法是find和substr。在下面的代码当中:
    string str = "aaaaddddssdfsasdf";
    size_t pos = str.find("ssdf", 3);                       //用if(pos == string::npos) 用来判断是否找到子串。
    string str2 = str.substr(pos, 5);
    find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。
char转换为Srting、String转为char

char转换为Srting

#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    char result[8] ;
    stream << 8888; //向stream中插入8888
    stream >> result; //抽取stream中的值到result
    std::cout << result << std::endl; // 屏幕显示 "8888"

String转换为char

#include <iostream>
#include <string>
using namespace std;

void main()
{
  string s="abcd";
  char *p=new char[s.size()+1];
  strcpy(p,s.c_str());
  cout<<p[1];
}


 

 

note:再进行多次转换的时候,必须调用stringstream的成员函数clear().

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值