在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。
除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过
。
在一行上输出一个句子,代表以单词为单位逆序排放的结果。
Nowcoder Hello
Hello Nowcoder
A b C d
d C b A
#include <stdint.h>
#include <stdio.h>
#include <string.h>
int main() {
uint8_t str[1000];
fgets((char*)str, sizeof(str), stdin);
str[strlen(str)-1] = '\0';
for(int i = strlen((char*)str); i > 0; i--)
{
if(str[i] == ' ')
{
for (int j = i + 1; str[j] != ' ' && str[j] != '\0'; j++) {
putchar(str[j]);
}
putchar(' ');
}
}
for(int k = 0;str[k] != ' ' && str[k] != '\0'; k++)
{
putchar(str[k]);
}
return 0;
} #include<stdio.h>
#include<string.h>
int main() {
char s[1001];
while (fgets(s, 1001, stdin)) {
s[strlen(s) - 1] = '\0';//fgets最后多一个\n替换为\0
for (int i = strlen(s) - 1; i >= 0; i--) {
if (s[i - 1] == ' ') {
printf("%s ", s + i);//从后往前,每碰到一个空格打印空格后面的字符串
s[i - 1] = '\0';//空格变为\0,每个字符串都会遇到\0而停止打印
}
}
printf("%s\n", s);//打印首字符串
}
return 0;
} #include <ctype.h>
#include <stdio.h>
#include <string.h>
/*
* ch[]:要被逆序的数组,start:逆序操作的起始位置,end:逆序操作的结束位置。
*/
int proc(char ch[], int start, int end) {
// 检查输入参数
if (ch == NULL || start >= end) {
return -1; // 输入参数错误
}
// 逆序操作
for (int i = start, j = end; i < j; i++, j--) {
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
return 1; // 成功执行逆序
}
void print(char a[]) {
int len = strlen(a);
for (int i = 0; i < len; i++) {
printf("%c", a[i]);
}
printf("\n");
}
int main() {
char arr[1002] = "\0";
int slow = 0, fast = 0; //快慢Flag,辅助标记用
fgets(arr, sizeof(arr), stdin);
arr[strcspn(arr, "\n")] = '\0';
int len = strlen(arr);
int i = 0;
//确保每一个数组元素是字符或空格
for (i = 0; i < len; i++) {
if ( !(isalpha(arr[i]) || isblank(arr[i])) ) {
return -1;
}
}
//第一次处理,先反转全部字符串
proc(arr, 0, len - 1);
//第二次处理,反转每个单词。初始slow和fast都是零。
for (i = 0; i < len; i++) {
if (arr[i] == ' ') {
fast = i - 1; //快游标拿到一个单词的末尾游标值
proc(arr, slow, fast);
slow = i + 1;
}
}
//这一步是反转最后一个单词,此时特殊在 slow < len-1 ,且因为上一步的for循环循环到最后时,
//最后一个元素不是空格而是\n了,所以此时直接反转从 slow 到 len-1 的元素即可。
if(slow < len - 1) {
proc(arr, slow, len - 1);
}
print(arr);
return 0;
} #include <stdio.h>
int main() {
int len;
char str[1001] ={0};
gets(str);
len = strlen(str);
while(len--)
{
if(str[len] == ' ')
{
printf("%s ", &str[len + 1]);
str[len] = '\0';
}
}
printf("%s", str);
return 0;
} #include <stdio.h>
/*思路:把单词依次存入字符串数组,然后逆序输出字符串*/
int main() {
char word[1000][1000]={0};
int n = 0;
while (scanf("%s", word[n++]) != EOF){}
for (int i = n - 2; i >= 0; i--) { // n-2是因为最后输入'\n'时n也会+1
printf("%s ", word[i]);
}
return 0;
}