string实现空格替换
char数组实现空格替换
STL替换string中的空格
#include<iostream>
#include<string>
using namespace std;
//char数组形式
void ReplaceBlank(char str[], int length) {
if (str == nullptr || length <= 0) {
return;
}
int originalLength = 0;//字符长度
int numbefOfBlank = 0;//空格个数
int i = 0;
while (str[i] != '\0')//遍历所有字符,分别统计个数(字符和空格)
{
++originalLength;//原始长度
if (str[i] == ' ') {
++numbefOfBlank;
}
++i;
}
//cout << originalLength << numbefOfBlank;
//newLength,空格替换之后的长度
int newLength = originalLength + numbefOfBlank * 2;
if (newLength > length) return;
int indexOfOriginal = originalLength;//字母长度
int indexOfNew = newLength;
while (indexOfOriginal >= 0 && indexOfNew>indexOfOriginal)//从后开始
{
if (str[indexOfOriginal] == ' ') {//此时p1的位置来到从后数第一个空格处,进行左移复制。
str[indexOfNew--] = '0';
str[indexOfNew--] = '2';
str[indexOfNew--] = '%';
}
else {
str[indexOfNew--] = str[indexOfOriginal];//复制元素
}
--indexOfOriginal;
}
}
**************************************************************
//string
void replaceblank(string str) {
if (str.empty()) {
return;
}
int orilen = str.size();//字fuchangdu
int numblank = 0;//空格个数
for (int i = 0; i < orilen; i++) {
if (str[i] == ' ') {
numblank++;
}
}
//cout << str.size() << numblank;
int newlen = orilen + numblank * 2;
str.append(numblank * 2, ' ');//对原始字符串基础上进行替换,字符串长度边长,需要在字符串末尾添加空字符进行扩展。
//对字符串从后向前替换空格
int indexOfOrg = orilen - 1; //indexOfOrg指向原字符串的最后一个字符的位置
int indexOfNew = newlen - 1; //indexOfNew指向扩展后字符串的最后一个字符的位置
while (indexOfOrg >= 0 && indexOfNew>indexOfOrg)
{
if (str[indexOfOrg] == ' ')
{
str[indexOfNew--] = '0';
str[indexOfNew--] = '2';
str[indexOfNew--] = '%';
}
else
{
str[indexOfNew--] = str[indexOfOrg];
}
indexOfOrg--;
}
cout << str;
/*
//尝试用for代替while报错。
for (int i = orilen - 1; i >= 0 && newlen > orilen; i--) {
if (str[i] == ' ') {
str[newlen] = '0';
str[newlen--] = '2';
str[newlen--] = '%';
}
else {
str[newlen--] = str[orilen];
}
//--orilen;
}
*/
}
int main()
{
string str = "we are happy.";
replaceblank(str);
/*
输入string
//while (getline(cin, str))
//replaceblank(str);
*/
}
先记录一下,仍存在的问题:1.对于用string进行空格替换以及char数组进行替换,中while函数如何替换成for循环。2.对于STL中替换空格,为什么.insert()只能插入两个字符。
希望感兴趣的能帮忙解决。