编写一个程序,将一个字符串中的所有单词都进行反转输出。
示例输入:
输入一个字符串: Hello, World!
预期输出:
反转后的字符串为: olleH, dlroW!
编写一个程序,将一个字符串中的所有单词都进行反转输出。
示例输入:
输入一个字符串: Hello, World!
预期输出:
反转后的字符串为: olleH, dlroW!
首先将字符串中的所有字母和非字母字符(即单词和标点符号)分开,然后反转每个单词,最后将所有单词和标点符号重新组合在一起。
#include <stdio.h>
#include <string.h>
// Function to reverse a string
void reverse(char* str, int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
// Function to separate words and punctuation from the input string
void processString(char* str) {
int len = strlen(str);
int start = 0;
for (int i = 0; i < len; i++) {
if (str[i] == ' ' || str[i] == '.' || str[i] == ',' || str[i] == '!' || str[i] == '?') {
// If the character is a punctuation mark, reverse the characters between the start of the word and the punctuation mark
reverse(str, start, i - 1);
start = i + 1;
}
}
// Reverse the characters in the last word
reverse(str, start, len - 1);
}
int main() {
char str[100];
printf("请输入一个字符串: ");
fgets(str, 100, stdin); // 从stdin读取输入的字符串
str[strcspn(str, "\n")] = 0; // 移除字符串结尾的'\n'
processString(str);
printf("反转后的字符串为: %s\n", str);
return 0;
}
在这个程序中,processString函数负责处理字符串中的每个单词并反转它们。该函数使用一个循环遍历字符串中的每个字符。如果字符是空格或者标点符号('.',',','!'或'?'),那么它将反转从单词开始到当前字符之前的所有字符。然后,它将更新单词的开始位置为当前字符之后的下一个字符。在循环结束后,它将反转最后一个单词中的所有字符。这样,每个单词都会被反转,而标点符号的位置将保持不变。