要求:
例如我们有一个字符串数组如下:
{ "111","222","111","111" ,"222","333","6"};
我们需要判断每个字符串出现的次数
输出样式为
111 出现的次数 3
222 出现的次数 2
333 出现的次数 1
6 出现的次数 1
思想:
1、定义一个结构体存放第一次出现的字符,如有重复的字符记录其出现的次数
如下
typedef struct SaveMessage
{
char fo[512]; //存放第一次出现的字符
int count; //如有重复,count++;
}Save;
Save save[521] = {}; //可以存放521个不同的字符
#include<string.h>
#include <iostream>
#include<string>
using namespace std;
#pragma warning(disable : 4996)
int main()
{
char *message[521] = { "111","222","111","111" ,"222","333","6"};
typedef struct SaveMessage
{
char str[512];
int count;
}Save;
Save save[521] = {};
int index = 0; //不是重复的字符串时候index++;用来记录下一个新的字符串的位置
int j = 0; //遍历已存在字符串变量
int i = 0; //遍历已知数组
for (i = 0; i < 7; i++) {
int find = 0; //判断是否是新的字符串,如果是新的字符出啊,走(2)添加到存储区域
for (j = 0; j < index; j++) {
//下面 if的功能 : 判断已存储的字符和原有的字符串是否有重复,如果有重复把对应的字符串的count++;并把find置为1;使之不能添加到存储区域
if (strcmp(message[i] , save[j].str)==0) {
save[j].count++;
find = 1;
break;
}
}
if (!find) { //(2)
strcpy(save[index].str, message[i]);
save[index].count++;
index++;
}
}
for (i = 0; i < index; i++) {
cout << save[i].str<< " 出现的次数 " << save[i].count << endl;
}
system("pause");
return 0;
}
运行截图:
希望能有更好的解决方法