public:
vector<string> summaryRanges(vector<int>& nums) {
vector<vector<int>> result;
vector<int>ivec;
vector<string>result1;
int len=nums.size();
int i=0;
while(i<len)
{
if(i<len-1&&nums[i]==nums[i+1]-1) //注意用了i+1一定要先判断i+1是否为空
{
ivec.push_back(nums[i]);
while(i<len-1&&nums[i]+1==nums[i+1])
i++;
ivec.push_back(nums[i]);
result.push_back(ivec);
ivec.clear();
i++;
}
else
{
ivec.push_back(nums[i]);
result.push_back(ivec);
ivec.clear();
i++;
}
}
char buffer[10];
for(int i=0;i<result.size();i++)
{
if(result[i].size()==2)
{ sprintf(buffer, "%d->%d", result[i][0], result[i][1]); 利用sprintf函数进行整数到字符串的转换;
result1.push_back(string(buffer)) ;
}
else
{ sprintf(buffer, "%d", result[i][0]);
result1.push_back(string(buffer)) ;
}
}
return result1;
}
};
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。
int main(void)
{
char buffer[80];
sprintf(buffer, "An approximation of Pi is %f\n", M_PI);
puts(buffer);
return 0;
}
sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示。
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
//把整数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 个位置,左对齐