我正在嘗試獲取字串的第 n 個元素,我知道它通常適用于諸如
char current_letter = input_string[j];
但是,當使用下面的代碼時,我得到一個輸出
0 current_letter: ABC
1 current_letter: BC
2 current_letter: C
ABC BC 9ekNc5GlorW1PkaBQlYCuXMBljdSQClygl00XwKxoVzYsf8FrCs3qUZV85gHJHsl
其中第 4 行只是coded_string正在列印的變數。這表明std::string current_letter = &input_string[j];嘗試獲取字串的第 n 個元素的方法實際上并不是回傳第 n 個元素,而是回傳字串中從指定索引開始的所有內容。
當我使用char而不是std::string定義current_letter變數時(并相應地將其從定義和要匹配的std::string方法char的前幾行中的更改為 ,我在該方法下得到一個紅色錯誤行,說:std::map.insert().find()
no instance of overloaded function "std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key=std::string, _Tp=std::string, _Compare=std::less<std::string>, _Alloc=std::allocator<std::pair<const std::string, std::string>>]" matches the argument list
我還希望將來能夠同時使用std::string鍵和值std::map,那么如何在不回傳字串中的任何其他元素的情況下檢索字串的第 n 個字母?
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
void set_seed_n_shuffle(std::vector<std::string> &array, unsigned seed){
std::srand(seed);
random_shuffle(std::begin(array), std::end(array));
}
std::string en_to_ch(std::vector<std::string> list, std::string input_string){
// list = ch_list, input_string = string to be converted
std::vector<std::string> en_list = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
std::map<std::string, std::string> en_ch_dict;
for (int i=0; i<en_list.size(); i ){
en_ch_dict.insert(std::pair<std::string, std::string>(en_list[i], list[i]));
//en_ch_dict.emplace(en_list[i], list[i]);
}
std::string coded_string;
for (int j=0; j<input_string.size(); j ){
std::string current_letter = &input_string[j];
std::cout << j << " current_letter: " << current_letter << "\n";
if (en_ch_dict.find(current_letter) == en_ch_dict.end()) {
coded_string = current_letter " "; // not found
} else {
coded_string = en_ch_dict.find(current_letter)->second " "; // found
}
}
return coded_string;
}
int main(){
std::vector<std::string> ch_list = {"randomcharacters1", "randomcharacters2","randomcharacters3","randomcharacters4","randomcharacters5",}
set_seed_n_shuffle(ch_list, 156);
std::string string_input = "ABC";
std::string new_string = en_to_ch(ch_list, string_input);
std::cout << new_string << "\n";
}
uj5u.com熱心網友回復:
std::string current_letter = &input_string[j];
input_string[j]是單個字符,而不是以 null 結尾的字串。如果您使用指向字符std::string的char*指標構造 a ,它將從該字符開始讀取,直到遇到空終止符'\0',在這種情況下不存在,因此結果是未定義的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513843.html
標籤:C 细绳字典
