编写一个函数,统计字符串中每个数字出现的次数,函数头如下: int* count(const string& s) 该函数统计了每个数字在该字符串中出现了多少次,返回值是1个10个元素的数组,每个元素表示一个数字出现的次数。例如,进行如下调用以后, int* counts=count(“12203AB3”); counts[0]为1,counts[1]为1,counts[2]为2,counts[3]为2。 编写主函数,对字符串“SSN is 343 32 4545 and ID is 434 34 4323”,输出相应统计的结果。 重新设计函数,将统计结果作为参数传递给函数(此处作为传出参数)。 void count(const string& s , int counts[], int size) 其中size为数组counts的大小,本例中为10。
时间: 2024-02-28 20:57:02 浏览: 68
好的,以下是第一个版本的函数实现:
```c++
int* count(const string& s){
int* counts = new int[10](); // 创建一个大小为10的数组,并初始化为0
for(int i = 0; i < s.length(); i++){
if(isdigit(s[i])){ // 如果该字符是数字
counts[s[i] - '0']++; // 将该数字出现的次数加1
}
}
return counts; // 返回统计结果
}
```
这个函数接受一个字符串作为参数,创建一个大小为10的数组,并将数组初始化为0。然后,遍历字符串中的每个字符,如果该字符是数字,则将该数字出现的次数加1。最后,返回统计结果。
以下是第一个版本的主函数实现:
```c++
#include <iostream>
#include <string>
using namespace std;
int main(){
string s = "SSN is 343 32 4545 and ID is 434 34 4323";
int* counts = count(s);
for(int i = 0; i < 10; i++){
cout << "counts[" << i << "] = " << counts[i] << endl;
}
delete[] counts; // 释放动态分配的数组内存
return 0;
}
```
这个主函数调用count函数统计字符串中每个数字出现的次数,并输出统计结果。
下面是第二个版本的函数实现:
```c++
void count(const string& s, int counts[], int size){
for(int i = 0; i < size; i++){
counts[i] = 0; // 将数组初始化为0
}
for(int i = 0; i < s.length(); i++){
if(isdigit(s[i])){ // 如果该字符是数字
counts[s[i] - '0']++; // 将该数字出现的次数加1
}
}
}
```
这个函数接受一个字符串、一个整数数组和数组大小作为参数,将数组初始化为0,然后遍历字符串中的每个字符,如果该字符是数字,则将该数字出现的次数加1。由于统计结果是作为参数传递出去的,所以这个函数没有返回值。
以下是第二个版本的主函数实现:
```c++
#include <iostream>
#include <string>
using namespace std;
int main(){
string s = "SSN is 343 32 4545 and ID is 434 34 4323";
int counts[10] = {0}; // 创建一个大小为10的数组,并初始化为0
count(s, counts, 10);
for(int i = 0; i < 10; i++){
cout << "counts[" << i << "] = " << counts[i] << endl;
}
return 0;
}
```
这个主函数创建一个大小为10的数组,并将数组初始化为0。然后,调用count函数统计字符串中每个数字出现的次数,并输出统计结果。由于数组是作为参数传递给count函数的,所以不需要手动释放内存。
阅读全文