我编写了以下代码,将'aaadddbbbccc'类型的字符串转换为'a3d3b3c3':
#include <iostream>
#include <string.h>
using namespace std;
void stringCompression(char *str,char *newStr){
int a[256] = {0};
int newCount = 0;
for(int i = 0; i < strlen(str) ; i++){
int j = str[i];
if (a[j] == 0 && strlen(newStr) <= strlen(str)){
a[j] = 1 ;
newStr[newCount] = str[i];
newCount++;
int count = 0;
for (int n = i; n < strlen(str); n++){
if(str[i] == str[n]){
count = count + 1;
}
}
newStr[newCount] =(char) count;
newCount++ ;
} else if (strlen(newStr) > strlen(str)){
strcpy(newStr,str);
}
}
}
int main() {
char str[] = "abcdabcdabcd";
char *newStr = new char[strlen(str)+1];
stringCompression(str,newStr);
cout << newStr;
return 0;
}
我的问题已经到了
newStr[newCount] =(char) count;
即使已插入,但输出不是
a3b3c3d3
而是a*squarebox*b*squarebox*c*squarebox*d*squarebox*
。方盒是2 * 2矩阵,其中一个值为所需的数字。我正在使用Eclipse IDE。。我将衷心感谢您的帮助。我该如何纠正。我是否使用正确的方法?
提前致谢。
最佳答案
问题是
newStr[newCount] =(char) count;
根据ascii表(http://www.asciitable.com/)将数字“ count”转换为与该数字相对应的字符,该表是不等于任何数字的“ 3”的“文本结尾”。
您应该将“ count”转换为字符串。参见这里例如:
Easiest way to convert int to string in C++
但是,请注意,它可能长于一位数字,例如,如果count为“ 11”,则它将以字符串表示形式使用两个字母。