C中的倒装句

C中的倒装句,c,reverse,C,Reverse,我试图找到符合我需要的东西,但没有找到 有人能帮我修复代码,成功地反转一句话(例如从:“我的名字是”到“是我的名字”)。 请不要使用函数和指针 #include <stdio.h> #include <string.h> void main() { int i = 0, j = 0, end, count=0, sumletters=0; char str[1000], strrev[1000]; fgets(str, sizeof(str),

我试图找到符合我需要的东西,但没有找到

有人能帮我修复代码,成功地反转一句话(例如从:“我的名字是”到“是我的名字”)。 请不要使用函数和指针

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

void main() {
    int i = 0, j = 0, end, count=0, sumletters=0;
    char str[1000], strrev[1000];

    fgets(str, sizeof(str), stdin);//get string from user

    sumletters = strchr(str, '\0') - str - 1;//find the last characters in string
    while (sumletters) {
        end = sumletters= strchr(str, '\0') - str - 1;
        while (str[sumletters] != ' '){
            //find the number letters of the last word and enter to counter
            sumletters--;
        }

        for (i = 0; sumletters!=end; i++, sumletters++) {
            //enter every leters from the last word to new string 
            strrev[i] = str[sumletters + 1];
            str[sumletters + 1] = '\0';//dros the leters that already copy
        }

    }

    puts(str);
    puts(strrev);


}
#包括
#包括
void main(){
int i=0,j=0,end,count=0,sumletters=0;
char-str[1000],strev[1000];
fgets(str,sizeof(str),stdin);//从用户处获取字符串
sumletters=strchr(str,'\0')-str-1;//查找字符串中的最后一个字符
while(三封信){
end=sumletters=strchr(str,'\0')-str-1;
while(str[sumletters]!=''){
//找到最后一个单词的数字字母并输入计数器
三个字母--;
}
for(i=0;sumletters!=end;i++,sumletters++){
//输入从最后一个单词到新字符串的每个删除项
strrev[i]=str[sumletters+1];
str[sumletters+1]='\0';//删除已复制的删除程序
}
}
put(str);
看跌期权(strev);
}

试着从句尾读你的句子。读到你碰到一个空格。然后将其逐字复制到新字符串中。重复这个


现在,这不是一个代码完成服务,但我给你一个粗略的想法。该代码不完整,因此我建议您自己更加努力


还有一件事

fgets
替换为
scanf(“%[^\n]s”,…)


fgets
将“我是谁”读为{'w'、'h'、'o'、'a'、'm'、''、'i'、'\n'、'\0'}

开始从后面扫描字符串,直到找到一个
'
,存储其位置以便下次从该索引开始。现在从这个位置向前移动到,直到找到另一个
'
或字符串结束,并继续将字符分配给新的反向数组。重复这些步骤,直到到达原始字符串的开头

char str[] = "This a sample string";
const int l = strlen(str);
char rev[l];
int i = 0, j, k = l-1;

while(i < l) {
    j = k; // starting point is k
    for(; str[j] != ' ' && j >= 0; j--); // moving j from right to left till ' ' found
    k = j-1; j++;
    for(; j < l && str[j] != ' '; j++, i++) { 
        rev[i] = str[j];
    }
    if(i < l)
        rev[i] = ' '; i++;
}
j=7,i=0//j--

j=6,i=0//j--

j=5,i=0,k=j-1//j--

j=6,i=0//j++

   str          rev
......................
Hello Foo     F       
      ^       ^
      j       i
j=7,i=1//j++,i++

   str          rev
......................
Hello Foo     Fo      
       ^       ^
       j       i
   str          rev
......................
Hello Foo     Foo       
        ^       ^
        j       i
   str          rev
......................
hello Foo     Foo       
         ^       ^
         j       i
j=7,i=2//j++,i++

   str          rev
......................
Hello Foo     Fo      
       ^       ^
       j       i
   str          rev
......................
Hello Foo     Foo       
        ^       ^
        j       i
   str          rev
......................
hello Foo     Foo       
         ^       ^
         j       i
j=8,i=3//j++,i++

   str          rev
......................
Hello Foo     Fo      
       ^       ^
       j       i
   str          rev
......................
Hello Foo     Foo       
        ^       ^
        j       i
   str          rev
......................
hello Foo     Foo       
         ^       ^
         j       i
上述过程将重复,直到
i


注意:假设单词用一个
'
字符分隔。

C没有指针就像没有轮子的汽车,或者没有互联网连接的堆栈溢出……你有没有想过使用
strtok
?嗨。谢谢我几乎成功了,但规则是接受“”和“”(“空间”和“标签”表示感知)。我的代码可以更改吗?(我无法将我的代码发送到这里)}