所以..我很抱歉我双重发布了。我真的不知道这个网站是如何运作的。但是,我在这里改变了我的整个问题,以便更容易理解。这是:
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.
答案 0 :(得分:3)
虽然我仍然觉得这是重复的,但解决这个问题的思维过程就是:
当您使用std::string
和std::reverse
等算法而不是使用原始数组和自定义时,所有这一切都变得非常简单。由于您被允许使用std::cin
和std::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;
}