在函数FUNC中实现功能:统计字符串中空格的个数,并返回结果
int FUNC(string s)
{ int sum=0;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ')
{sum++;}
}
return sum;
}
当 两个线程(任务)都调用 func1() 时,打印的结果如下所示,task1、task2 得到的结果 sum 都是正确的。特别地,在 task1、task2 中 函数 func1()内的变量 add1、add2、sum 的地址都是不同的。这意味着,在 task1 中的 func1() 使用的是 task1 对应的内存空间,在 task2 中的 func1() 使用的是 task2 对应的内存空间。
Hello world!
TASK2 func1: : add1 addr=0x3ffb7cb0, add2 addr=0x3ffb7cb4, sum addr=0x3ffb7cb8 sum1=3
TASK1 func1: : add1 addr=0x3ffb74b0, add2 addr=0x3ffb74b4, sum addr=0x3ffb74b8 sum1=3
TASK2 func1: : add1 addr=0x3ffb7cb0, add2 addr=0x3ffb7cb4, sum addr=0x3ffb7cb8 sum1=3
TASK1 func1: : add1 addr=0x3ffb74b0, add2 addr=0x3ffb74b4, sum addr=0x3ffb74b8 sum1=3
我们可以得到这样的结论: 两个 task(也可称为两个模块、线程)虽然调用的是同一个函数,但函数内的变量使用的是相对独立的地址来存储数据,因此数据之间互不干扰。
可以用以下函数来统计字符串中的空格个数并返回结果:
int countSpace(string str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
count++;
}
}
return count;
}
这个函数接受一个字符串参数,遍历字符串中的每个字符,如果字符是空格则计数器加一。最后返回计数器的值即可。
使用例子:
#include <iostream>
using namespace std;
int countSpace(string str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
count++;
}
}
return count;
}
int main() {
string str = "hello world! how are you?";
int num_spaces = countSpace(str);
cout << "Number of spaces in \"" << str << "\" is: " << num_spaces << endl;
return 0;
}
输出:
Number of spaces in "hello world! how are you?" is: 5
注意:如果字符串中包含制表符或换行符等空白符号,计数器可能不准确。可以根据需求修改函数逻辑以适应不同情况。