2016-11-10 15 views
0

这个想法是修剪字符串从偏移量值开始,直到大小和返回值以及新的字符串返回1;并且如果它超出代码范围以仅返回0。 这是我的代码:需要编写一个函数,该函数需要一个字符串整数偏移量和大小,并打印从偏移量开始并抵达偏移+大小的字符串

int subPrint(char *s, int offset,int size){ 
    char *m; 
    m = (s + offset); 
    while(size != 0){ 
    m = (m + 1); 
    if(m == '\0') 
     return 0; 
    size--; 

} 
s = m; 
return 1; 

} 

void subPrintTest(){ 
    char s[20] = "INDUSTRIAL"; 
    subPrint(s,2,4); 
    printf("%s",s); 
} 

void main(){ 
    subPrintTest(); 
    getch(); 
} 

的问题是,它的印刷原字符串s不变

+1

我没有看到问题,*为什么*应该改变原始字符串或以任何方式进行修改?程序是否按原样工作?或者,也许你应该改变你的'subPrint'函数来实际*打印*的东西?否则,它的命名很糟糕。 –

+0

我不需要使用subPrint打印它,但使用subPrintTest,它不需要只打印我指定的部分 –

+0

所以你想让你的函数*得到*一个子字符串,而不是打印它?那么你需要一个目的地来复制它。 –

回答

0

您遇到的问题是,指针s的按值的函数subPrint通过。为了做你想做的事情,你可以传递一个指向指针的指针。

参考:Is passing pointer argument, pass by value in C++?

+0

您的意思就像是使用指针指向指针s? –

+0

是的。您可以将s传递给函数subPrint。在subPrint中使用* s = m; – dkach

+0

尝试过,但仍然没有使用 –

0

你可以保持你的代码并替换该行s = mmemcpy(destination, src, size_t)您将需要包括string.h中

+0

问题是我不允许使用string.h库,否则它会更容易 –

+0

更好地使用'memove()'而不是'memcpy()'。对于重叠的数组,memcpy()没有很好定义,memove()很好定义。 – chux

0

OP的subPrint(char *s, int offset,int size)更改某些变量的代码,但绝不会影响阵列由s指向也不打印任何东西。


subPrint()不需要。使用"%.*s"指定精度字段并限制输出的宽度。

char s[20] = "INDUSTRIAL"; 
int offset = 2; 
assert(offset >= 0 && offset <= strlen(s)); 
int size = 4; 
printf("%.*s", 4, s + 2); 

或者干脆

int subPrintA(char *s, int offset,int size) { 
    while (offset > 0 && *s) { 
    offset--; 
    s++; 
    } 
    while (size > 0 && *s) { 
    putchar(*s); 
    size--; 
    s++; 
    } 
} 
+0

无法使用strlen,因为它是不允许我正在解决的练习 –

+0

@AliHaroon而不是像不能使用[使用strlen]的限制(http://stackoverflow.com/questions/40535031/need-to-write - 一个函数,这需要一个字符串,一个整数偏移量和大小和原理/ 40536358#comment68312491_40536358)在评论中,以及发布后,更好地包括在原始文章中的限制。 IAC,这里使用的'strlen()'是一个错误检查 - 对代码来说不重要。 – chux

+0

对不起,这之前没有提及这一点,thx无论如何 –

0

的问题是,你是别人操纵字符串指针,其中,预计受到影响原始字符串。在subPrint中进行打印,你应该得到想要的结果。

int subPrint(char *s, int offset,int size) { 
    char *m; 
    m = (s + offset); 
    while(size != 0){ 
    if(*m == '\0') 
     return 0; 
    putchar(*m); // printing is done here 
    m = (m + 1); 
    size--; 
    } 
    return 1; 
} 

void subPrintTest(){ 
    char s[20] = "INDUSTRIAL"; 
    subPrint(s,2,4); 
} 
+0

将'putchar('\ 0');',如果'offset == strlen(s)' - 当然,大小应该是<= 0在这种情况下。 '如果(m =='\ 0')'是奇数。也许'if(* m =='\ 0')'? – chux

+0

以及th thx这似乎解决了打印字符串@ smac89的问题 –

相关问题