将字符串转换为char数组

时间:2016-09-10 02:16:15

标签: c++ arrays string char

C ++的新手,所以这里是我正在研究的项目的一部分,用一个字符串打印最常用的数字以及它的使用次数。我认为这是对的,但由于某种原因,我的字符串不会被读入。有关如何修复的任何提示或建议?

#include <string>
#include <iostream>

using namespace std;

char getMostFreqLetter(string ss);

int main() {
    string s; //initilizing a variable for string s
    s = ("What is the most common letter in this string "); // giving s a string

    getMostFreqLetter(s); // caling the function to print out the most freq Letter

    return 0;
}

char getMostFreqLetter(string ss) {
    int max, index, i = 0;
    int array[255] = {0};
    char letters[];

    // convert all letters to lowercase to make counting letters non case sensative
    for (int i = 0; i < ss.length(); i ++){
        ss[i] = tolower(ss[i]);
    }

    //read each letter into
    for (int i = 0; i < ss.length(); i ++){
        ++array[letters[i]];
    }
    //

    max = array[0];
    index = 0;
    for (int i = 0; i < ss.length(); i ++){
        if( array[i] > max)
        {
            max = array[i];
            index = i;
        }
    }

    return 0;
}

3 个答案:

答案 0 :(得分:1)

如果您不将空格视为字母。

然后更有效的方式可能是

vector<int> count(26,0);
for (int i = 0; i < s.length(); i++) {
    int range = to_lower(s[i])-'a';
    if ( range >= 0 && range < 26)
        count[range]++;
}

// Now you can do fix the max while iterating over count;

答案 1 :(得分:0)

使用string::c_str()。 它将字符串转换为字符数组。

答案 2 :(得分:-1)

您的代码中有一些错误。

首先,字符letters数组完全未使用。您应该忽略它并迭代字符串ss而不是我认为您打算这样做。

这会将您的第二个for循环从++array[letters[i]];更改为++array[ss[i]];

其次,你的最后一个循环是错误的。您使用i作为索引来查找数组中的频率,而您需要使用字符的ascii值(ss [i])。这是一个带注释的固定版本:

    index = ss[0];
    max = array[index];
    for (int i = 0; i < ss.length(); i ++){
        if(!isspace(ss[i]) && array[ss[i]] > max)
        {
            max = array[ss[i]];   // you intended to use the ascii values of the characters in s to mark their place in array. In you code, you use i which is the just the index of the character in s as opposed to the ascii value of that character. Hence you need to use array[ss[i]].
            index = ss[i];

        }
    }
    return index;

进行上述更改后,在字符串上运行时会得到以下输出:

Most freq character: t