void Copies(char *s, char *s1, int n)
{
int p = 0, q = strlen(s1);
for( int i = 0; i < n; i++)
for( int j = 0; j < q; j++, s[p++]=s1[j] )
}
копирование строк
написал:
Код:
но так как компилятора в данный момент под рукой нету то не уверен что это будет работать) так что прошу - проверьте, работает ли, а если нет, то дайте свой вариант)
Код:
void strncat(char* dst, char* src, int n)
{
while( n-- )
{
char* p = src;
while( *dst++ = *p++ );
}
}
{
while( n-- )
{
char* p = src;
while( *dst++ = *p++ );
}
}
Ошибки перечислять не буду, лучше сразу напишу правильный вариант (который, к тому же, еще и короче на две строки! :D )
Код:
void Copies(char *s, char *s1, int n)
{
for(int i = 0; i < n; i++) strcpy(s+i*strlen(s1), s1);
}
{
for(int i = 0; i < n; i++) strcpy(s+i*strlen(s1), s1);
}
ага, спасибо)
код
Код:
#include <stdio.h>
#include <string.h>
void Copies(char *s, char *s1, int n)
{
int p = 0, q = strlen(s1);
for( int i = 0; i < n; i++)
for( int j = 0; j < q; j++) s[p++]=s1[j];
}
void strncat(char* dst, char* src, int n)
{
while( n-- )
{
char* p = src;
while( *dst++ = *p++ );
}
}
void copies(char *s, char *s1, int n)
{
for(int i = 0; i < n; i++) strcpy(s+i*strlen(s1), s1);
}
int main( void )
{
unsigned int num = 2;
char a[] = "asd";
char *b;
b = new char[strlen(a)*num];
printf("%s\n", a);
Copies(b, a, 2);
printf("1: %s\n", b);
strncat(b, a, 2);
printf("2: %s\n", b);
copies(b, a, 2);
printf("3: %s\n", b);
return 0;
}
#include <string.h>
void Copies(char *s, char *s1, int n)
{
int p = 0, q = strlen(s1);
for( int i = 0; i < n; i++)
for( int j = 0; j < q; j++) s[p++]=s1[j];
}
void strncat(char* dst, char* src, int n)
{
while( n-- )
{
char* p = src;
while( *dst++ = *p++ );
}
}
void copies(char *s, char *s1, int n)
{
for(int i = 0; i < n; i++) strcpy(s+i*strlen(s1), s1);
}
int main( void )
{
unsigned int num = 2;
char a[] = "asd";
char *b;
b = new char[strlen(a)*num];
printf("%s\n", a);
Copies(b, a, 2);
printf("1: %s\n", b);
strncat(b, a, 2);
printf("2: %s\n", b);
copies(b, a, 2);
printf("3: %s\n", b);
return 0;
}
компилятор выдаёт
Код:
Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland
strcpyn.cpp:
Warning W8060 strcpyn.cpp 16: Possibly incorrect assignment in function strncat(char *,char *,int)
Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland
strcpyn.cpp:
Warning W8060 strcpyn.cpp 16: Possibly incorrect assignment in function strncat(char *,char *,int)
Turbo Incremental Link 5.60 Copyright (c) 1997-2002 Borland
результат
Код:
asd
1: asdasd@
2: asd
3: asdasd
1: asdasd@
2: asd
3: asdasd
но всё равно всем спасибо)
з.ы. кстати, объясните, почему
for( int j = 0; j < q; j++) s[p++]=s1[j]; работает, а for( int j = 0; j < q; j++, s[p++]=s1[j]); - нет... по идее должно работать))
Цитата:
2Lerkin не работает твой вариант
так работает, только вопрос: чем тебе стандартные функции не угодили(хотя бы пример Сары смотри).
Код:
void _strncat(char* dst, char* src, int n)
{
char *temp = dst;
while( n-- )
{
char* p = src;
while(*p)
*dst++ = *p++;
}
*dst = 0;
}
{
char *temp = dst;
while( n-- )
{
char* p = src;
while(*p)
*dst++ = *p++;
}
*dst = 0;
}
Цитата: Mr.Hacker
з.ы. кстати, объясните, почему
for( int j = 0; j < q; j++) s[p++]=s1[j]; работает, а for( int j = 0; j < q; j++, s[p++]=s1[j]); - нет... по идее должно работать))
for( int j = 0; j < q; j++) s[p++]=s1[j]; работает, а for( int j = 0; j < q; j++, s[p++]=s1[j]); - нет... по идее должно работать))
Объяснение очень простое. В первом случае сначала j=0, потом выполняется s[p++]=s1[j] и только после этого j увеличивается на 1, а во втором случае у тебя сначала идет j++, а потом s[p++]=s1[j], т.е. первый символ пропускается.
А вот этот мусор в конце строки "asdasd@" - результат того, что ты забыл добавить нулевой символ.
Код:
void strncat(char* dst, char* src, int n)
{
while( n-- )
{
while( *dst++ = *src++ );
dst--;
}
}
{
while( n-- )
{
while( *dst++ = *src++ );
dst--;
}
}
Так работает.
2OlgaKr насчёт стандартных всё хорошо, просто самому интересно как ещё можно реализовать)
unsigned int num = 2;