我正在处理一个函数,该函数将用户输入作为main的引用,并将其与存储字母表的字符串数组进行比较。我的目标是使函数计数user_string中每个字母的出现次数。这是我到目前为止所得到的:
int letter_counter(string user_Text_Ref)
{
string alfa_arr[LETTERS] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
int antal_arr[LETTERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int i, j;
for(i = 0; i < LETTERS; i++)
{
for(j = 0;j < sizeof(user_Text_Ref) ; j++)
{
if(alfa_arr[i] == user_Text_Ref(j)) // Here is my problem.
{
antal_arr[i] += 1;
cout << alfa_arr[i] << " : " << antal_arr[i] << endl;
}
else
{
continue;
}
}
}
return antal_arr;
}
所以要快速总结一下这是什么。函数letter_counter引用来自main的用户提交的字符串作为参数。 LETTERS是一个设置为26的const int。 alfa_arr包含所有小写字母a-z和antal_arr包含 对应于字母的数字,用于记录所有字母的出现次数 这些信。 第一个for循环遍历所有字母,第二个循环遍历字符串user_Text_Ref,它就在那里,我很困惑。
我尝试了几种方法来比较alfa_arr [i]和user_Text_Ref(==,strcmp及其变体和一些我不记得的) 我收到一个我不理解的错误(我使用的是代码块):
error: no match for call to ‘(std::string {aka std::basic_string<char>}) (int&)’|
这是什么意思?
在这种情况下比较两个字符串的最佳方法是什么?
(你可以创建一个包含字符串和整数的多维数组吗?)
我仍然是c ++的新手,感谢任何帮助或建议。 感谢您抽出宝贵时间阅读我的问题。
干杯!
答案 0 :(得分:0)
错误意味着您正在尝试将字符串用作函数。要从中获取单个字符,请使用[]
,而不是()
。这样就可以为字符串中的单个字符建立索引。
if(alfa_arr[i] == user_Text_Ref[j])
其次,您有alfa-arr
中字符的字符串数组。您很可能希望在那里存储单个字符,并与从字符串迭代的字符进行比较。
char alfa_arr[LETTERS] = { 'a', 'b', ... };
第三,要获得字符串的长度user_Text_Ref.length()
,sizeof
只会给出在这种情况下为该对象分配的内存大小。
答案 1 :(得分:0)
应该是
user_Text_Ref[j]
另请注意,您只需从该字母中减去'a'
即可找到一封信的编号:
for(j = 0;j < user_Text_Ref.length(); j++) { // sizeof is also a problem here
if (user_Text_Ref[j]>='a' && user_Text_Ref[j]<='z') { // if this is a letter
pos = user_Text_Ref[j] - 'a'; // find its number but sbtracting 'a' code from its code
antal_arr[pos] ++;
cout << user_Text_Ref[j] << " : " << antal_arr[pos] << endl;
}
}
所以你根本不需要alfa_arr
数组。
答案 2 :(得分:0)
您可以使用此代码实现目标......
#include <iostream>
#include <algorithm>
using namespace std;
const int LETTERS = 26;
void letter_counter(string str, int* p) {
// fill up alphabet array
char alfa_arr[LETTERS] = { 0 };
for (int i = 0; i < LETTERS; i++) {
alfa_arr[i] = static_cast<char>(i + 97);
}
// convert string to lowercase
transform(str.begin(), str.end(), str.begin(), ::tolower);
// fill up occurrences array
for (int i = 0; i < LETTERS; i++) {
*p++ = count(str.begin(), str.end(), alfa_arr[i]);
}
}
int main() {
int antal_arr[LETTERS] = { 0 };
int* p = nullptr;
string str{"This program counts letter OCCURRENCES in TEXT despite CASE"};
// fill occurrences array
p = &antal_arr[0];
letter_counter(str, p);
// show results
for (int i = 0; i < LETTERS; i++) {
cout << antal_arr[i] << endl;
}
return 0;
}
请注意, letter_counter 不会返回int类型。相反,它填充了一个外部的int数组。