C 给定一个字符串,将其子字符串存储在二维数组中
我被要求编写一个程序,给定字符串acmprog,我应该生成并排序一组子字符串 这是我的代码:C 给定一个字符串,将其子字符串存储在二维数组中,c,C,我被要求编写一个程序,给定字符串acmprog,我应该生成并排序一组子字符串 这是我的代码: void gen_subStrings(char a[],char sub[][100],int len){ int i,count=2; char first=a[0]; printf("%c",first); for(i=0;i<len-2;i++){ strncpy(sub[i],a,count); printf("%s\n",
void gen_subStrings(char a[],char sub[][100],int len){
int i,count=2;
char first=a[0];
printf("%c",first);
for(i=0;i<len-2;i++){
strncpy(sub[i],a,count);
printf("%s\n",sub[i]);
count++;
}
}
main(){
char string[]={"acmprog"};
int len = sizeof(string);
char subStrings[len][100];
gen_subStrings(string,subStrings,len);
system("pause");
}
何时应该:
a
ac
acm
acmp
acmpr
acmpro
acmprog
我做错了什么?每次在字符串末尾都必须复制NULL 试试下面的方法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Literal "acmprog"
void gen_subStrings( const char s[], size_t n, char sub[][n] )
{
size_t i = 0;
for ( ; i + 1 < n; i++ )
{
strncpy( sub[i], s, i + 1 );
sub[i][i+1] = '\0';
}
sub[i][0] = '\0';
}
int main( void )
{
char string[] = "acmprog";
size_t n = sizeof( string );
char subStrings[n][n];
gen_subStrings( string, n, subStrings );
for( size_t i = 0; subStrings[i][0] != '\0'; i++ )
{
printf( "%s\n", subStrings[i] );
}
system( "pause" );
return 0;
}
我差点忘了空的。难怪我的输出中有额外的随机字符。非常感谢。
for(i=0;i<len-2;i++)
{
strncpy(sub[j],a,count); //Use a different variable
sub[j][count]='\0';// at end , copy NULL
printf("%s\n",sub[j++]);
count++;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Literal "acmprog"
void gen_subStrings( const char s[], size_t n, char sub[][n] )
{
size_t i = 0;
for ( ; i + 1 < n; i++ )
{
strncpy( sub[i], s, i + 1 );
sub[i][i+1] = '\0';
}
sub[i][0] = '\0';
}
int main( void )
{
char string[] = "acmprog";
size_t n = sizeof( string );
char subStrings[n][n];
gen_subStrings( string, n, subStrings );
for( size_t i = 0; subStrings[i][0] != '\0'; i++ )
{
printf( "%s\n", subStrings[i] );
}
system( "pause" );
return 0;
}
a
ac
acm
acmp
acmpr
acmpro
acmprog