Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Слияние неогр. числа строк


Автор: Vov4egMoroZ 19.12.2008, 16:42
Здравствуйте.
Помогите, немогу написать прогу:  На вход функции подается неограниченное число строк. На выходе - слияние всех строк в одну, не используя strcat().
Заранее спасибо!

Автор: Avaj 20.12.2008, 14:58
String можно использовать? smile (конечно врядли, но всё  же...)

А что значит:
Цитата
На вход функции подается неограниченное число строк
?

Т.е. на входе массив строк?

Автор: Avaj 21.12.2008, 16:11
Вот что получилось:

Код

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>

char *strings_cat(char **s, int n){
    char *res_string;
    int res_len = 0, i, j, k = 0;
    for(i=0;i<n;i++) res_len += strlen(s[i]);
    res_string = (char*)malloc((res_len + 1)*sizeof(char));
    for(i=0;i<n;i++){
        if(i) k+=strlen(s[i-1]);
        for(j=0;j<strlen(s[i]);j++){
            res_string[k + j] = s[i][j];
        }
    }
    res_string[res_len] = '\0';
    return res_string;
}

int main(){
    int n, i;
    printf("kolichestvo skladivaemih strok = ");
    scanf("%d",&n);
    char buff[100];//объединяемые строки могут иметь длину не более 99
    char **s = (char**)calloc(n,sizeof(char*));
    for(i=0;i<n;i++){
        printf("\nVvedite %d - yu stroku - ",i+1);
        scanf("%s",buff);
        s[i] = (char*)malloc(strlen(buff)*sizeof(char));
        strcpy(s[i],buff);
    }
    char *res_string = strings_cat(s,n);
    printf("\n%s",res_string);
    free(res_string);
    for(i=0;i<n;i++) free(s[i]);
    free(s);
    getch();
    return 0;
}

Автор: Vov4egMoroZ 21.12.2008, 16:21
ого... спасиба!!! smile  я полдня маялся, пытался с массивами чтото дельное сделать...
а string то можно использовать... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)