想用mfc实现获取edit control中的字符串,压缩字符串并输出结果,将数组输出到static text中
压缩规则如下:◆仅压缩连续重复出现的字符。例如:字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。◆压缩字段的格式为"字符重复的次数+字符"。例如...
压缩规则如下:◆仅压缩连续重复出现的字符。例如:字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。◆压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。我现在只会获取字符串,并输出到static text中。我的想法是先判断字符串前后i和i+1内容是否相同,相同的话给一个int值+1,然后进行下面的判断;如果不同,在数组中存下int值和字符串第i个位置的内容。这样的话,最后结果是一个数组,但是我不会怎么将数组输出到static text中,求大神指导下面是我写的代码
展开
展开全部
我觉得可以这样做:
再声明一个CString retStr,这个用来存放要输出的结果。声明一个int num表示重复个数并初始化为1
判断字符串前后i和i+1内容是否相同,相同的话num++,不同的话则去处理retStr(处理时,声明一个CString temp用来存储要压缩的当前内容;如果num大于1,那么temp.Format("%c%d", str[i], num);如果num=1,那么就temp.Format("%", str[i]);然后retStr+=temp; 最后再num=1开始下一次比较)
然后SetDlgItemText(STATIC_TEXT_ID, retStr).
CString str, retStr;
int num = 1;
CEdit *pBoxOne = (CEdit *)GetDlgItem(IDC_EDIT1);
pBoxOne->GetWindowText(str);
//m_Edit.GetWindowText(str);
for(int i = 0; i < str.GetLength(); i++)
{
if (str[i] == str[i + 1])
{
num++;
}
else
{
CString temp;
if (num > 1)
{
temp.Format("%d%c", num, str[i]);
}
else
{
temp.Format("%c", str[i]);
}
retStr += temp;
num = 1;
}
}
SetDlgItemText(IDC_STATIC, retStr);
追问
您好,为什么我运行这个程序会出现这个问题:
error C2664: “void ATL::CStringT::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [5]”转换为“const wchar_t *”
追答
if (num > 1)
{
temp.Format(_T("%d%c"), num, str[i]);
}
else
{
temp.Format(_T("%c"), str[i]);
}
应该是字符集设置的问题,我用的多字符集,你用的Unicode字符集。上面Format部分代码改一下就好
2019-01-30
展开全部
CString str;
GetDlgItemTextW(IDC_EDIT1, str);
wchar_t *s;
wchar_t c='\0';
int len = str.GetLength();
s = new wchar_t[len + 1];
memset(s, '\0', len + 1);
int count = 1, s_pos=0;
for (int i = 0; i < len; i++)
{
if (c == '\0')
{
c = str.GetAt(i);
s[s_pos++] = c;
}
else
{
if (c == str.GetAt(i))
{
count++;
if (i == len - 1)
{
s[s_pos++] = count + '0';
}
}
else
{
if (count > 1)
{
s[s_pos++] = count + '0';
c = '\0';
}
c = str.GetAt(i);
s[s_pos] = c;
s_pos++;
count = 1;
}
}
}
s[s_pos] = '\0';
SetDlgItemTextW(IDC_STATIC1, s);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询