给你若干个字符串,请编程输出每个字符串的子串个数。
输入
若干个字符串,每个字符串占一行,字符串中不含空格,长度最大为1000。
输出
对应每一行的字符串,输出该字符串子串的个数
代码如下
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while (getline(cin, s)) { // 读入一行字符串
int n = s.size(), ans = 0;
for (int i = 0; i < n; i++) { // 枚举起点
for (int j = i + 1; j <= n; j++) { // 枚举终点
ans++; // 子串个数加1
}
}
cout << ans+1 << endl; // 输出子串个数
}
return 0;
}
说白了,比如有字符串 abcd
那么它有如下子串
a
b
c
d
ab
bc
cd
abc
bcd
abcd
输入:循环L,每个三地址指令的ud链
输出: L的循环不变计算语句
方法:
常数
,或者其所有定值点都在循环L外部
常数
,或者其所有定值点都在循环L外部,或者只有一个到达定值,该定值是循环中已经被标记为“不变”的语句
这段代码是用来计算给定字符串的子串个数。
关键步骤和算法思想如下:
定义了一个函数 count_substrings(string)
,用于计算给定字符串的子串个数。
首先计算了输入字符串的长度,保存在变量 length
中。
根据组合数学的知识,对于长度为n的字符串,子串个数可以通过公式 n*(n+1)/2 计算得到。所以在这里,通过计算 length * (length + 1) // 2
来得到子串的个数,并将结果转化为整数返回。
接下来,通过调用 int(input())
来读取一个整数,表示接下来要输入的字符串的个数,并将其保存在变量 num_strings
中。
创建一个空列表 strings
来存储接下来要输入的字符串。
使用一个循环从标准输入中读取每个字符串,并将其添加到列表 strings
中。
最后,使用一个循环遍历列表 strings
中的每个字符串,并调用 count_substrings(string)
函数来计算对应字符串的子串个数,并将结果打印输出。
总的来说,这段代码是通过遍历给定的字符串列表,并计算每个字符串的子串个数,最后将结果打印输出。关键步骤是通过组合数学公式计算子串个数。