c++中出现Debug Assertion Failed!错误。。 10
题目要求是将输入的只有*和字母的字符串中,*移动到字符串后面。。。我这样做了,然后出现了上述的错误提示#include<iostream>#include<string>...
题目要求是将输入的只有*和字母的字符串中,*移动到字符串后面。。。我这样做了,然后出现了上述的错误提示
#include<iostream>
#include<string>
using namespace std;
void fun(string s)
{
int i=0;
int j;
int k=0;
while(s[k]!='\0')
{ if(s[i]=='*')
{
for(j=0;s[j+1]!='\0';j++)s[j]=s[j+1];
s[j+1]='*';
k++;
}
else {i++;k++;}
}
}
void main()
{
string s1;
cout<<"请输入仅由*和字母组成的字符串:\n";
cin>>s1;
cout<<"初始字符串为:"<<s1<<endl;
fun(s1);
cout<<"调序后字符串为:"<<s1<<endl;
} 展开
#include<iostream>
#include<string>
using namespace std;
void fun(string s)
{
int i=0;
int j;
int k=0;
while(s[k]!='\0')
{ if(s[i]=='*')
{
for(j=0;s[j+1]!='\0';j++)s[j]=s[j+1];
s[j+1]='*';
k++;
}
else {i++;k++;}
}
}
void main()
{
string s1;
cout<<"请输入仅由*和字母组成的字符串:\n";
cin>>s1;
cout<<"初始字符串为:"<<s1<<endl;
fun(s1);
cout<<"调序后字符串为:"<<s1<<endl;
} 展开
展开全部
#include<iostream>
#include<string>
using namespace std;
void fun(string &s)
{
/* nCurPos:当前遍历到的位置 nCount:字符'*'的个数 nTempPos:实际就是nCurPos + nCount */
int nCurPos = 0, nCount = 0, nTempPos = 0;
/* 用于存储遍历到的'*' */
char *chTemp = new char[s.length() + 1];
memset(chTemp,0,s.length() + 1);
/* 开始遍历 */
while(nCurPos < s.length())
{
/* 遇到'*' */
if ('*' == s[nCurPos])
{
/* 可能有多个连续的'*' */
nTempPos = nCurPos;
do
{
/* 将连续的'*'拷贝出来,并计数 */
memcpy(chTemp + nCount,&s[nTempPos],1);
nCount++;
} while ('*' == s[++nTempPos]);
/* 如果获取到的已经是字符串末尾的那段'*',则表示已经调整完毕,无需继续 */
if (nTempPos == s.length())
{
break;
}
/* 确保有'*'待调整 */
if ('\0' != *chTemp)
{
/* 获取当前字符串长度 */
int nTempLen = s.length();
/* 将'*'后面的字符串往前挪动 */
s.replace(nCurPos,nTempLen - nCurPos - 1,s,nTempPos,nTempLen - nTempPos);
/* 将前面遍历拷贝出来的'*'放在字符串末尾 */
s.replace(nCurPos + nTempLen - nTempPos,strlen(chTemp) + 1,chTemp,0,strlen(chTemp) + 1);
/* 临时计数器清空,进入下一轮遍历 */
nCount = 0;
memset(chTemp,0,strlen(chTemp));
nCurPos++;
}
else
{
break;
}
}
else
{
/* 当前的字符不是'*',继续往下走 */
nCurPos++;
}
}
/* 释放内存并将其指向NULL防止内存泄露及野指针 */
delete[] chTemp;
chTemp = NULL;
}
void main()
{
string s1;
cout<<"请输入仅由*和字母组成的字符串:\n";
cin>>s1;
cout<<"初始字符串为:"<<endl<<s1<<endl;
fun(s1);
cout<<"调序后字符串为:"<<s1<<endl;
}
小哥,你的代码不太好改,就直接用我自己的想法来实现了,应该是可行的,自己测试下吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询