我曾经在 C++ 中有一些代码,它将字符串存储为字符矩阵中的一系列字符(字符串是一行)。Rcpp.h 提供了 Character matrix 和 LogicalVector 类:
LogicalVector unq_mat( CharacterMatrix x ){
int nc = x.ncol() ; // Get the number of columns in the matrix.
LogicalVector out(nc); // Make a logical (bool) vector of the same length.
// For every col in the matrix, assess whether the column contains more than one unique character.
for( int i=0; i < nc; i++ ) {
out[i] = unique( x(_,i) ).size() != 1 ;
}
return out;
}
逻辑向量标识哪些列包含多个唯一字符。然后将其传递回 R 语言并用于操作矩阵。这是一种非常 R 的思维方式。但是我有兴趣在 C++ 中发展我的思维,我想写一些实现上述目标的东西:所以找出 n 个字符串中的哪些字符并不完全相同,但最好使用像 std::string 这样的 stl 类。作为给出三个字符串的概念示例:A =“Hello”,B =“Heleo”,C =“Hidey”。代码会指出位置/字符 2、3、4、5 不是一个值,但位置/字符 1(“H”)在所有字符串中都是相同的(即只有一个唯一值)。我在下面有一些我认为有效的东西:
std::vector<int> StringsCompare(std::vector<string>& stringVector) {
std::vector<int> informative;
for (int i = 0; i < stringVector[0].size()-1; i++) {
for (int n = 1; n < stringVector.size()-1; n++) {
if (stringVector[n][i] != stringVector[n-1][i]) {
informative.push_back(i);
break;
}
}
}
return informative;
}
它应该通过外部循环遍历每个字符位置(0 到 string-1 的大小),并通过内部循环查看字符串 n 中的字符是否与字符串 n-1 中的字符不同。在字符完全相同的情况下,例如上面我的 hello 示例中的 H,这永远不会是真的。对于字符串中的字符不同的情况,将满足内部循环 if 语句,记录字符位置,并中断内部循环。然后我得到一个向量,其中包含 n 个字符串中字符的索引,其中字符并不完全相同。然而,这两个函数给了我不同的答案。我还能如何逐个字符地遍历 n 个字符串并检查它们是否完全相同?
谢谢,本。