这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAKS_RIJECI 100
#define MAKS_DUZINA_RIJECI 50
char *ispremjestaj(char recenica[], int pozicije[], int brojPozicije) {
static char rezultat[MAKS_DUZINA_RIJECI * MAKS_RIJECI];
char *rijeci[MAKS_RIJECI];
int brojac = 0;
char *token = strtok(recenica, " ");
while (token != NULL && brojac < MAKS_RIJECI) {
rijeci[brojac++] = token;
token = strtok(NULL, " ");
}
for (int i = 0; i < brojPozicije; i++) {
int pozicija = pozicije[i] - 1;
if (pozicija >= 0 && pozicija < brojac) {
char *temp = rijeci[pozicija];
for (int j = pozicija; j > 0; j--) {
rijeci[j] = rijeci[j - 1];
}
rijeci[0] = temp;
}
}
strcpy(rezultat, "");
for (int i = 0; i < brojac; i++) {
strcat(rezultat, rijeci[i]);
strcat(rezultat, " ");
}
rezultat[strlen(rezultat) - 1] = '\0';
return rezultat;
}
int main() {
return 0;
}
当单词之间有一个很大的空格或句子末尾有一个空格时,它会删除它,我试图通过添加另一个if
语句来解决这个问题,如果主句的结尾以空格结束,那么最后一句也应该是这样的,但它不起作用.还有一个错误,在这个例子中发生了这种情况,
结果:错误的结果 测试代码:
以下是main
中的测试输入:
char text[] = "Introduction to programming is a new name for Basics of computer science";
int array[] = { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 };
printf("'%s'\n", ispremjestaj(text, array, 20));
printf("'%s'", ispremjestaj(text, array, 21));
程序的输入/输出:
Expected output(s):
'Introduction to programming is a new name for Basics of computer science'
'to Introduction programming is a new name for Basics of computer science'
My program printed:
'Introduction to programming is a new name for Basics of computer science'
'Introduction'
执行时间(四舍五入):0秒
EDIT: 这是我的代码 modified by chqrlie's code.
但是,仅仅通过修改输入句子(recenica
)而不使用另一个字符串(rezultat
)就可以做到这一点吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAKS_RIJECI 100
char *ispremjestaj(char recenica[], const int pozicije[], int brojPozicije) {
const char *rijeci[MAKS_RIJECI];
size_t duzine[MAKS_RIJECI];
int brojac = 0;
const char *p = recenica;
for (brojac = 0; brojac < MAKS_RIJECI; brojac++) {
p += strspn(p, " ");
if (*p == '\0')
break;
rijeci[brojac] = p;
duzine[brojac] = strcspn(p, " ");
p += duzine[brojac];
}
for(int i =0;i<brojPozicije;i++){
int pozicija=pozicije[i]-1;
if(pozicija>=0 && pozicija<brojac){
const char *temp=rijeci[pozicija];
int duzina=duzine[pozicija];
for(int j=pozicija;j-- >0;){
rijeci[j+1]=rijeci[j];
duzine[j+1]=duzine[j];
}
rijeci[0]=temp;
duzine[0]=duzina;
}
}
char rezultat[100];
char *q=rezultat;
for(int i=0;i<brojac;i++){
memcpy(q, rijeci[i], duzine[i]);
q+=duzine[i];
*q++=' ';}
if(q>rezultat)
--q;
if(recenica [strlen(recenica)-1]==' ')
*q++=' ';
*q='\0';
strcpy(recenica, rezultat);
return recenica;
}
int main() {
return 0;
}