Cout是空的,我不知道为什么

时间:2019-05-13 15:28:48

标签: c++ cout

正在进行leetcode练习,您可以在此处查看:https://leetcode.com/problems/unique-morse-code-words/

我在找到正确答案时遇到了麻烦,但是在发现问题上却遇到了更多麻烦。我正在尝试使用cout打印正在使用的向量,以查看出了什么问题,但是由于某种原因,它似乎可以输出空字符串。

这是我的代码...

#include <array>
#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
int uniqueMorseRepresentations(vector<string>& words) {
    int num_of_uniq_words = 0;
    string arr[] = {"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"}; 
    string maps[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
                     "--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    vector<string> all_words_morse;
    for (int i = 0; i < words.size(); i++) {
        string morse;
        for (int j = 0; j < words[i].length(); j++){

                for(int q = 0; q < sizeof(arr)/sizeof(arr[0]); q++) {
                    if (arr[q] == to_string(words[i].at(j))) 
                        morse.append(maps[q]);
                }


        }
        //cout << morse << endl;
        all_words_morse.push_back(morse);
    }
    vector<string> uniq_words;
    for(int i = 0; i < all_words_morse.size(); i++) {
        if (find(uniq_words.begin(), uniq_words.end(), all_words_morse[i]) == uniq_words.end()) //not present
            uniq_words.push_back(all_words_morse[i]);
    }
    //printing
    for (int i = 0; i < all_words_morse.size(); i++)
        cout << all_words_morse[i] << " ";
    cout << "\n" << endl;
    for (int i = 0; i < uniq_words.size(); i++)
        cout << uniq_words[i] << " ";
    cout << "\n" << endl;

    num_of_uniq_words = uniq_words.size();
    return num_of_uniq_words;
}
};

并使用[“ gin”,“ zen”,“ gig”,“ msg”]的测试用例输入,sdtout为... “


这是大约4行空字符串,我不明白为什么。 有人有任何建议或知道我在做什么错吗? 谢谢

2 个答案:

答案 0 :(得分:0)

问题

函数std::to_string不使用char作为参数,因此它隐式将其转换为int,该int返回数字的字符串。例如:to_string('a') -> to_string(97) -> "97"

修复

使用char或将std::string(1,words[i].at(j))的{​​{3}}方法正确地将std::string转换为字符串。

替代方法

如汤玛斯·马修斯(Thomas Matthews)在评论中所建议,请使用std::map<char, std::string>并创建一个映射,以避免必须管理两个列表(转换),而可以使用在O(logn)中执行查找的结构来节省时间的O(n)

答案 1 :(得分:0)

问题是使用to_string函数。它不执行您认为的操作:

  

std :: to_string

     

将数值转换为std :: string。

您将一个char传递给它,因此它将char解释为一个数字值,即它的ASCII值。而对于“ g”,您将得到“ 103”。

为什么arr是一个字符串数组而不是字符数组(如果它仅包含字符)?如果它是一个字符数组,那么您一开始就不需要to_string函数。

P.S。要在代码中发现问题,最好的办法是对其进行调试。调试器是每个程序员都应使用的工具。所以请检查一下。