如何在给定位置从动态分配的数组中打印字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在给定位置从动态分配的数组中打印字符串相关的知识,希望对你有一定的参考价值。

我想使用该函数从keybord打印给定位置的一个字符串,按照它们在数组中的确切顺序,但将其他字符更改为null。问题是函数的第一个循环甚至不会执行,我不知道为什么。

-ex:第一个输出:

e il cie                       enta traspare   e

- 并通过传递给函数a = 2,我想得到如下输出:

cie //and the rest of the chars must be ''


char no_words(char *sentence, int a)
{
  int count=0,i,len;
  char lastC;
  len=strlen(sentence);

  if(len > 0)
  {
    lastC = sentence[0];
  }
  for(i=0; i<=len; i++)
  {
    if((sentence[i]==' ' || sentence[i]=='') && lastC != ' ')
    {
      count++;
    }
    lastC = sentence[i];

    if(a!=count-1){
      sentence[i] = '';
      printf("%c", sentence[i]);
    }else
      printf("%c", sentence[i]);
  }
  return 0;
}

//分隔我的文字的功能

char fun(char *tab, char warunek){

int i,l=0;
l = strlen(tab);
i=0;
char poczatek;


while(i<l){


do{
    if(tab[i] == '
'){
        printf("
");
    }

    if(*(tab+i) == warunek && i< l){

        do{

            printf("%c", *(tab+i));
            ++i;

        }while (*(tab+i) != warunek && i < l);
        printf("%c", *(tab+i));

    }

    *(tab+i) = '';
    printf("%c", *(tab+i));
    ++i;


}while (*(tab+i) != warunek && i < l);


}
*(tab+l)= '';




return 0;

}

//在主要

int main(){

char **array = NULL;
int i,j;
char line[100];  
int line_count=0;
int line_lenght=0;
int a;
char warunek;
int l=0;
int *lenght;
char **arr2 =NULL;

FILE *fp;
fp = fopen("tekst1.txt", "r");
if(fp == NULL){
    printf("blad otwarcia pliku!");
    exit -1;
}

while (fgets(line, sizeof(line),fp) != NULL){ 
    line_count++;
}

rewind(fp);


array = malloc(sizeof(char*) * line_count); 
if (array == NULL){
    return 0;
}


for (i=0; i<line_count; i++){

    fgets(line, sizeof(line), fp); //szczytuje po 1 linii

    line_lenght = strlen(line);


    array[i] = malloc(line_lenght +1); //+1 for null


    strcpy(array[i], line);

}

for (i=0; i<line_count; i++){
    printf("%s", array[i]);
}

printf("
enter position
");
scanf(" %d", &a);
printf("
enter condition
");
scanf(" %c", &warunek);
printf("

");





for (j=0; j<line_count; j++){

        *(*(array)+j) = fun(*(array+j) , warunek);

}



for (j=0; j<line_count; j++){

    *(*(array)+j)=print_nth_word(*(array+j),a);
    printf("
");

}



 return 0;

}

答案
void print_nth_word (const char *sentence, int n) {
    int word_no = 0;
    char ch, lch = ' ';

    while (ch = *sentence++) {
        if (ch == ' ' || word_no != n) printf ("%c", '.');
        else printf ("%c", ch);

        if (ch == ' ' && lch != ' ') word_no++;
        lch = ch;
    }
}

我用''替换'.'以使结果可见。

调用:

print_nth_word ("e il cie                       enta traspare   e", i)

输出:

.....cie........................................

以上是关于如何在给定位置从动态分配的数组中打印字符串的主要内容,如果未能解决你的问题,请参考以下文章

将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告

cout没有打印任何东西到控制台

从多项式函数字符串动态分配数组

指针数组的动态内存分配

动态分配的字符串的输入和输出数组

如何正确地为字符串“数组”动态分配内存