如何反转字符串中的所有单词? C ++

时间:2014-01-23 20:42:49

标签: c++ c string reverse words

所以..我很抱歉我双重发布了。我真的不知道这个网站是如何运作的。但是,我在这里改变了我的整个问题,以便更容易理解。这是:

char s[1002];
cin.getline(s, 1002, '\n');
int k;
int p = strlen(s);
strcat(s, " ");

for (int i = 0; i <= p; i++)
{
    if (s[i] == ' ')
    {

        for (k = i - 1; (k != -1) && (s[k] != ' '); k--)
            cout << s[k];
        cout << " ";

    }
}

'',',','。'和';'应该是分隔符,但我设法只使用''(间隔)。

我不能使用std::string,因为我正在做一个功课,我需要做一个非常具体的功能 - char const* reverseWordsOnly(const char*)

代码应该做什么?

Input: Reversing the  letters, is; really hard.

Output: gnisreveR eht  srettel, si; yllaer drah.

4 个答案:

答案 0 :(得分:3)

虽然我仍然觉得这是重复的,但解决这个问题的思维过程就是:

  1. 编写一个函数,对于字母字符(a-z和A-Z)返回true,否则返回false。
  2. 从字符串的开头
  3. 开始
  4. 找到下一个字母字符,记下其位置(开始)
  5. 找到下一个非字母字符,记下其位置(结束)
  6. 反转[开始,结束]
  7. 范围内的字符
  8. 重复步骤3-5,直到字符串结束
  9. 当您使用std::stringstd::reverse等算法而不是使用原始数组和自定义时,所有这一切都变得非常简单。由于您被允许使用std::cinstd::cout<iostream>),因此反对使用<string>的论点是愚蠢的。

答案 1 :(得分:0)

您可以将字符串存储在另一个没有符号的数组中,然后反转新数组。例如,如果您想忽略逗号(,)或分号(;),您可以编写类似

的内容
while(i <= p)
{
    if (s[i] == ',' || s[i] == ';')
    {
        i++;

    }
    else
    {
       temp[j]=s[i];
       j++;
       i++;
    }
 }

然后你可以反转临时数组。

答案 2 :(得分:0)

而不是像这样打印字母

for (k = i - 1; (k != -1) && (s[k] != ' '); k--)
    cout << s[k];
cout << " ";

检查是否需要忽略该字母,如此

for (k = i - 1; (k != -1) && (s[k] != ' '); k--)
    if((s[k] != ',') && (s[k] != ';') && ...other ignored chars...)
       cout << s[k];
cout << " ";

答案 3 :(得分:0)

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;

int main(){
    char s[1001],ch;
    int c=0;    // for counting how many words are in the array
    while((ch = getchar()) != '\n'){    // input string until new line
        if ((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))   // check if the input character is a letter or symbol
            s[c++] = ch;    // if its a letter then insert into the array
    }

    for (int i=c-1;i>=0;i--)    // print the array in reverse order
        cout<<s[i]<<" ";

    return 0;
}