首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向后输出char数组中的每个单词

如何向后输出char数组中的每个单词
EN

Stack Overflow用户
提问于 2018-12-18 15:53:33
回答 3查看 1.2K关注 0票数 1

我必须要做一个函数,反转写在字符数组中的单词。

代码语言:javascript
复制
char reverse(char m[50]) {
    for (int i = 0; i <= m['\0']; i++) {
        for (int j = m['\0']-1; j >= m[0]; j--) {
            m[i] = m[j];
        }
    }
}

这是我所想到的代码,它将输出如下内容:

输入:I am new

输出:wen ma I

我需要的是:

输入:I am new

输出:I ma wen

希望您能理解我在这里的意思,因为我对编程非常陌生,在这方面真的需要帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-18 16:05:28

如果您想要一个c++解决方案,那么下面的解决方案应该可以工作:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string str = "I am new";
    auto begin = str.begin();
    while (begin != str.end())
    {
        auto end = std::find(begin, str.end(), ' ');
        std::reverse(begin, end);
        if (end == str.end())
        {
            break;
        }
        begin = end + 1;
    }
    std::cout << str << "\n";
}
票数 2
EN

Stack Overflow用户

发布于 2018-12-18 16:19:53

由于不仅一个空格可以分隔单词,还应该考虑其他空格。

代码语言:javascript
复制
#include <iostream>

bool IsWhiteSpaceOrEnd(char c) {
    switch (c) {
    case ' ':
    case '\t':
    case '\r':
    case '\n':
    case 0:
        return true;
    }
    return false;
}

void ReverseWord(char* begin, char* end) {
    --end;
    while (begin < end) {
        char temp = *begin;
        *begin = *end;
        *end = temp;
        ++begin;
        --end;
    }
}

void ReverseEachWord(char* str) {
    char* begin = str;
    while (0 != *begin) {
        char* end = begin + 1;
        // find next end of word
        while (!IsWhiteSpaceOrEnd(*end)) {
            ++end;
        }
        // reverse the word between begin and end
        ReverseWord(begin, end);
        begin = end;
        // go forward to the next begin of a word
        while ((0 != *begin) && IsWhiteSpaceOrEnd(*begin)) {
            ++begin;
        }
    }
}

int main(int argc, char** argv)
{
    char* text = strdup("I am new");
    ReverseEachWord(text);
    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2018-12-18 16:59:53

我会将char数组输入和输出转换为字符串,至少用于处理。如果确实需要,可以将结果转换回char数组。

代码语言:javascript
复制
string ReverseText(const string& text)
{
    string word(""), result("");

    for (const auto& character : text)
    {
        if (!isspace(character))
            word += character;  // Build the next word to reverse
        else
        {
            std::reverse(word.begin(), word.end()); // Reverse the completed word
            result += word + character; // Add your processed word to the result
            word = "";  // Clear word variable for next iteration
        }
    }

    std::reverse(word.begin(), word.end()); // Don't forget the last word built
    return result + word;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53836713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档