例如,给定一个字符串'字符串',我希望在迭代时得到以下内容:' string',' strin',' tring',' stri',' trin,' ring'' str',...,' i' ,' n'' g'。
答案 0 :(得分:3)
char str[] = "string";
int len = strlen(str);
for(int s_len = len; s_len > 0; --s_len)
for(int start = 0; start + s_len <= len; ++start)
printf("%.*s\n", s_len, str + start);
答案 1 :(得分:1)
如何使用字符串库中的strncpy()和memset():
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char str[] = "string";
int len = strlen(str);
int sz = len + 1;
char cpy[sz];
for (int i=0; i<len; ++i)
for (int j=i; j<len; ++j)
printf("%s\n", strncpy(memset(cpy, 0, sz), &str[i], len-j));
}
输出:
string
strin
stri
str
st
s
tring
trin
tri
tr
t
ring
rin
ri
r
ing
in
i
ng
n
g
答案 2 :(得分:1)
使用snprintf()和puts():
的解决方案#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char str[] = "string";
int len = strlen(str);
int sz = len + 1;
char cpy[sz + 1]; /* sz of str + 1 (for '\n') */
for(int i=0; i<sz; ++i)
for(int j=i; j<len; ++j) {
snprintf(cpy, sz-j, "%s\n", &str[i]);
puts(cpy);
}
}
输出:
string
strin
stri
str
st
s
tring
trin
tri
tr
t
ring
rin
ri
r
ing
in
i
ng
n
g
答案 3 :(得分:0)
不知道更简单的方法。但是要存储迭代,您可以使用sprintf
。这与printf
类似,但将输出打印到字符串。
检查一下:
char buf[33]="";
for (i = 0; i < strlen(str); i++)
{
for (j = 0; j <= i; j++)
{
for (k = j; k < j+strlen(str) - i; k++)
{
sprintf(buf+strlen(buf), "%c", str[k]);
//printf("%c", str[k]);
}
buf[strlen(buf)] = '\0'; //adding null terminate
printf("%s", buf);
buf[0] = '\0'; //terminating from begining to reuse buf
printf("\n");
}
}