如何迭代字符串的组合

时间:2016-05-16 22:23:09

标签: c

例如,给定一个字符串'字符串',我希望在迭代时得到以下内容:' string',' strin',' tring',' stri',' trin,' ring'' str',...,' i' ,' n'' g'。

4 个答案:

答案 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");
  }
}