在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。
除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过
。
在一行上输出一个句子,代表以单词为单位逆序排放的结果。
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; }