2

我正在尝试实现 C How to program 中的问题 8.13,它只是从字符串的第二个字符向左移动,并将字符串的第一个字符与“ay”连接起来。例如:

跳转 -> umpjay -> hetay 等等。

我的尝试在这里:

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

char *appender(char s);
void shiftLeft(char [], int);

int main()
{
    char s[100], *lastThree;
    
    fgets(s, 100, stdin);
    s[strcspn(s, "\n")] = 0;
    char *tokenPtr = strtok(s, " ");

    while(tokenPtr != NULL){
        
        lastThree = appender(tokenPtr[0]);
        //printf("lastThree : %s\n", lastThree); //for debugging
        
        shiftLeft(tokenPtr, strlen(tokenPtr));
        
        sprintf(tokenPtr, "%s%s ", tokenPtr, lastThree); // concatenation
        
        
        printf("tokenptr:%s ", tokenPtr);
        tokenPtr = strtok(NULL, " ");
    }
    
    
    return 0;
}

char *appender(char s){
    char *returned = (char*)malloc(sizeof(char)*4); // allocation
    snprintf(returned, sizeof(returned), "%c%s",s,"ay"); // append ay
    return returned;
}

void shiftLeft(char s[], int len){
    int i;
    for(i=0;i<len-1;i++){
        s[i]=s[i+1];
    }
    s[i] = '\0';
}

但是代码工作错误。即使输入只是一个单词,它也会将 tokenPtr评估为yaay 。

4

0 回答 0