Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何按字符分割字符串?C++;_C++ - Fatal编程技术网

C++ 如何按字符分割字符串?C++;

C++ 如何按字符分割字符串?C++;,c++,C++,我正在做一个有趣的国际民航组织随机翻译程序,我几乎完成了,但我有一个小问题。如何按每个字符拆分字符串?例如,我想要的输出是; 国际民航组织字母表中翻译的mike一词是: m:迈克 i:印第安纳州 k:公斤 e:回声 到目前为止,我只是得到; 国际民航组织字母表中翻译的mike一词是: 迈克 印第安纳州 公斤 回音 显然,我的文章主要是代码,我必须添加更多细节,所以我添加这句话是希望满足需求。此外,翻译应该是正确的顶部彼此,而不是一个额外的空间下降。我有问题,我不知道如何解决 #include &

我正在做一个有趣的国际民航组织随机翻译程序,我几乎完成了,但我有一个小问题。如何按每个字符拆分字符串?例如,我想要的输出是; 国际民航组织字母表中翻译的mike一词是:

m:迈克

i:印第安纳州

k:公斤

e:回声

到目前为止,我只是得到; 国际民航组织字母表中翻译的mike一词是:

迈克

印第安纳州

公斤

回音

显然,我的文章主要是代码,我必须添加更多细节,所以我添加这句话是希望满足需求。此外,翻译应该是正确的顶部彼此,而不是一个额外的空间下降。我有问题,我不知道如何解决

#include <iostream>
#include <string>

using namespace std;

int main()
{
   string word = " ", phonetic;
   int count = 0;
   
   cout << "Enter a word: ";
   cin >> word;
   
   while(count < word.length())
    {
        switch(word.at(count))
        {
            case 'A': case 'a': phonetic += " Alpha\n";
                break;
            case 'B': case 'b': phonetic += " Bravo\n";
                break;
            case 'C': case 'c': phonetic += " Charlie\n";
                break;
            case 'D': case 'd': phonetic += " Delta\n";
                break;
            case 'E': case 'e': phonetic += " Echo\n";
                break;
            case 'F': case 'f': phonetic += " Foxtrot\n";
                break;
            case 'G': case 'g': phonetic += " Golf\n";
                break;
            case 'H': case 'h': phonetic += " Hotel\n";
                break;
            case 'I': case 'i': phonetic += " Indiana\n";
                break;
            case 'J': case 'j': phonetic += " Juliet\n";
                break;
            case 'K': case 'k': phonetic += " Kilo\n";
                break;
            case 'L': case 'l': phonetic += " Lima\n";
                break;
            case 'M': case 'm': phonetic += " Mike\n";
                break;
            case 'N': case 'n': phonetic += " November\n";
                break;
            case 'O': case 'o': phonetic += " Oscar\n";
                break;
            case 'P': case 'p': phonetic += " Papa\n";
                break;
            case 'Q': case 'q': phonetic += " Quebec\n";
                break;
            case 'R': case 'r': phonetic += " Romeo\n";
                break;
            case 'S': case 's': phonetic += " Sierra\n";
                break;
            case 'T': case 't': phonetic += " Tango\n";
                break;
            case 'U': case 'u': phonetic += " Uniform\n";
                break;
            case 'V': case 'v': phonetic += " Victor\n";
                break;
            case 'W': case 'w': phonetic += " Whiskey\n";
                break;
            case 'X': case 'x': phonetic += " X-Ray\n";
                break;
            case 'Y': case 'y': phonetic += " Yankee\n";
                break;
            case 'Z': case 'z': phonetic += " Zulu\n";
                break;
            default: cout << "You did not enter a name" << endl;
            
        }
        count++;
    }

    cout << "The word "<< word <<" in the ICAO alphabet is:\n" 
    << phonetic << endl;
    
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
字串=”,拼音;
整数计数=0;
cout>单词;
while(count默认值:cout如果我正确理解了您的帖子,那么您不希望拆分字符串,而是希望遍历它的字符

在C++11中:

for (char& c : word) {
    // switch (c)
}

如果我正确理解了您的帖子,那么您不希望拆分字符串,而是希望遍历它的字符

在C++11中:

for (char& c : word) {
    // switch (c)
}

要遍历字符串,只需使用迭代器:

std::string test_string = "test";
for( auto const& character : test_string )
{
    std::cout << character << "\n";
}
std::string test\u string=“test”;
for(自动常量和字符:测试字符串)
{

std::cout要遍历字符串,只需使用迭代器:

std::string test_string = "test";
for( auto const& character : test_string )
{
    std::cout << character << "\n";
}
std::string test\u string=“test”;
for(自动常量和字符:测试字符串)
{

std::coutinfinitezero的答案是完全正确的,可能是这种情况下的最佳解决方案

我想另外展示一个无循环的解决方案,它也是基于
std::unordered_map
,并且能够阅读完整的句子

基本思想是:基于将单个字符转换为iCoWord的要求,我决定为此使用一个专用函数:
std::transform
。您可以查看文档

请参阅下面的附加/替代解决方案:

#include <iostream>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <iterator>

int main()
{
    // Preinitialize an unordered map
    std::unordered_map<int, std::string> alpha =
    {
        {'a', "Alpha"},{'b', "Bravo"},{'c', "Charlie"},{'d', "Delta"},{'e', "Echo"},{'f', "Foxtrot"},{'g', "Golf"},
        {'h', "Hotel"},{'i', "Indiana"},{'j', "Julia"},{'k', "Kilo"},{'l', "Lima"} ,{'m', "Mike"},{'n', "November"},
        {'o', "Oscar"},{'p', "Papa"},{'q', "Quebec"},{'r', "Romeo"},{'s', "Sierra"},{'t', "Tango"},{'u', "Uniform"},
        {'v', "Victor"},{'w', "Whiskey"},{'x', "X-Ray"},{'y', "Yankee"},{'z', "Zulu"}};

    // Read word form user
    if (std::string word; std::getline(std::cin, word)) {

        // Show output to user
        std::cout << "\n\n" << word << " --> ";

        // Convert and show
        std::transform(word.begin(), word.end(), std::ostream_iterator<std::string>(std::cout, " "),
            [&](const char c) { return (isalpha(c) ? alpha[tolower(c)] : ""); });
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
//预初始化无序映射
std::无序映射alpha=
{
{'a',“Alpha”},{'b',“Bravo”},{'c',“Charlie”},{'d',“Delta”},{'e',“Echo”},{'f',“Foxtrot”},{'g',“Golf”},
{'h',“Hotel”},{'i',“Indiana”},{'j',“Julia”},{'k',“Kilo”},{'l',“Lima”},{'m',“Mike”},{'n',“十一月”},
{'o',“奥斯卡”},{'p',“爸爸”},{'q',“魁北克”},{'r',“罗密欧”},{'s',“塞拉”},{'t',“探戈”},{'u',“制服”},
{'v',“Victor”},{'w',“威士忌”},{'x',“x射线”},{'y',“Yankee”},{'z',“Zulu”};
//读取word表单用户
if(std::string word;std::getline(std::cin,word)){
//向用户显示输出

std::coutinfinitezero的答案是完全正确的,可能是这种情况下的最佳解决方案

我想另外展示一个无循环的解决方案,它也是基于
std::unordered_map
,并且能够阅读完整的句子

基本思想是:基于将单个字符转换为iCoWord的要求,我决定为此使用一个专用函数:
std::transform
。您可以查看文档

请参阅下面的附加/替代解决方案:

#include <iostream>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <iterator>

int main()
{
    // Preinitialize an unordered map
    std::unordered_map<int, std::string> alpha =
    {
        {'a', "Alpha"},{'b', "Bravo"},{'c', "Charlie"},{'d', "Delta"},{'e', "Echo"},{'f', "Foxtrot"},{'g', "Golf"},
        {'h', "Hotel"},{'i', "Indiana"},{'j', "Julia"},{'k', "Kilo"},{'l', "Lima"} ,{'m', "Mike"},{'n', "November"},
        {'o', "Oscar"},{'p', "Papa"},{'q', "Quebec"},{'r', "Romeo"},{'s', "Sierra"},{'t', "Tango"},{'u', "Uniform"},
        {'v', "Victor"},{'w', "Whiskey"},{'x', "X-Ray"},{'y', "Yankee"},{'z', "Zulu"}};

    // Read word form user
    if (std::string word; std::getline(std::cin, word)) {

        // Show output to user
        std::cout << "\n\n" << word << " --> ";

        // Convert and show
        std::transform(word.begin(), word.end(), std::ostream_iterator<std::string>(std::cout, " "),
            [&](const char c) { return (isalpha(c) ? alpha[tolower(c)] : ""); });
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
//预初始化无序映射
std::无序映射alpha=
{
{'a',“Alpha”},{'b',“Bravo”},{'c',“Charlie”},{'d',“Delta”},{'e',“Echo”},{'f',“Foxtrot”},{'g',“Golf”},
{'h',“Hotel”},{'i',“Indiana”},{'j',“Julia”},{'k',“Kilo”},{'l',“Lima”},{'m',“Mike”},{'n',“十一月”},
{'o',“奥斯卡”},{'p',“爸爸”},{'q',“魁北克”},{'r',“罗密欧”},{'s',“塞拉”},{'t',“探戈”},{'u',“制服”},
{'v',“Victor”},{'w',“威士忌”},{'x',“x”-