2016-05-16 23 views

Antwort

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); 
+0

Ich wusste bis heute nicht über das '*' Format in printf() ... Cool! –

0

Ich weiß nicht einfacher Weg. Um Iterationen zu speichern, können Sie sprintf verwenden. Dies ähnelt printf, druckt die Ausgabe jedoch in eine Zeichenfolge.

prüfen dies:

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

Wie über die Strncpy mit folgenden() und memset() aus der String-Bibliothek:

#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)); 
} 

Ausgang:

string 
strin 
stri 
str 
st 
s 
tring 
trin 
tri 
tr 
t 
ring 
rin 
ri 
r 
ing 
in 
i 
ng 
n 
g 
1

Eine Lösung mit snprintf() und 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); 
     } 
} 

Ausgang:

string 
strin 
stri 
str 
st 
s 
tring 
trin 
tri 
tr 
t 
ring 
rin 
ri 
r 
ing 
in 
i 
ng 
n 
g 
Verwandte Themen