7-32 说反话-加强版 (20分)【超级详细注释版】

#include <stdio.h>
#include <string.h>

int main(){
    int len,k=0,tag;		//tag为标记位
    char c[500001]={0};
   
    gets(c);
    len=sizeof(c);			//sizeof()比strlen()多一位‘\n’
    for(int i=0;i<len;i++){			//将原字符串多余空格删除,保证每个单词间只有一个空格;
        if(!(c[i]==' '&&c[i+1]==' '))
            c[k++]=c[i];
    }
 //    puts(c);				//打开put()看效果


    tag=strlen(c);			//tag每次标记在每个单词的最后一个字母的后一位
    						//其初始标记在字符串结尾‘\0’处
    if(c[tag-1]==' '){			//若最开始的字符串后面有空格,再经过上面的循环,最后至多一个空格
    							//若有空格删除空格,并变化tag
        c[tag-1]=c[tag];
        tag--;
    }
//    puts(c);				//打开put()看效果
    
    
    for(int i=strlen(c);i>=0;i--){			//倒序
        if(c[i]==' '||i==0){		//若遇到空格或者遇到第一个字母
            if(c[i]==' ')		//两个if都是将k标记在每个单词的第一个字母上
                k=i+1;
            else if(i==0)
                k=i;
            for(int j=k;j<tag;j++){			//打印每个单词
                printf("%c",c[j]);
            }
            if(i!=0)
                printf(" ");		//在没遇到第一个单词前,每个单词间需要打印空格
            tag=i;			//每次打印一个单词后,将tag重新指向前一个(下一次需要打印)单词的后一位
        }
            
    }
    
    return 0;
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是 C 语言实现反话加强版的代码,同时附有注释讲解: ```c #include <stdio.h> #include <string.h> int main() { char input[1000]; // 输入字符串 char output[1000]; // 输出字符串 char word[100]; // 存储单个单词 int len = 0; // 输出字符串的长度 int word_len = 0; // 当前单词的长度 int i = 0, j = 0; // 循环变量 fgets(input, 1000, stdin); // 读取输入字符串 while (input[i] != '\0') { // 循环遍历字符串 if (input[i] != ' ' && input[i] != '\n') { // 如果不是空格或换行符 word[word_len++] = input[i]; // 存储单词 } else { // 遇到空格或换行符 for (int k = word_len - 1; k >= 0; k--) { // 反转单词 output[len++] = word[k]; } output[len++] = ' '; // 在单词后面添加空格 word_len = 0; // 重置当前单词的长度 } i++; // 继续遍历字符串 } for (j = 0; j < len - 1; j++) { // 输出串最后一个字符是空格,因此只输出到倒数第二个字符 printf("%c", output[j]); // 输出字符 } printf("\n"); // 输出换行符 return 0; } ``` 该代码使用了 C 语言自带的标准库函数 `fgets()` 读取输入字符串,然后使用循环遍历字符串中的每个字符。当遇到空格或换行符时,将已经存储的单词反转,并存储到输出字符串中;同时在输出字符串中添加一个空格。最后输出输出字符串,并加上一个换行符。 需要注意的是,在 C 语言中没有字符串类型,因此需要使用字符数组来存储字符串。此外,由于输出字符串需要在循环中动态变化,因此需要使用一个计数器来记录输出字符串的长度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值