Tôi đang cố gắng để đảo ngược thứ tự các từ trong một câu tại chỗ, ví dụ:Đảo ngược thứ tự từ trong một chuỗi ở vị trí
này câu từ được đảo ngược.
trở thành
đảo ngược. là những từ câu này
Đây là những gì tôi có cho đến nay, hầu như hoạt động: tôi sử dụng hàm strrev để đảo ngược chuỗi, và sau đó là chức năng inprev để gửi mỗi từ với chức năng strrev cá nhân, để đảo ngược chúng quay trở lại hướng ban đầu, nhưng theo thứ tự đảo ngược. Gửi một con trỏ để bắt đầu và kết thúc hàm strrev có vẻ hơi ngớ ngẩn, nhưng nó cho phép cùng một hàm được sử dụng trong inprev(), gửi một con trỏ tới đầu và cuối của các từ riêng lẻ.
#include <stdio.h>
#include <string.h>
void strrev(char * start, char * end);
void inprev(char * start);
int main(void)
{
char str[] = "Foobar my friends, foobar";
char * end = (str + strlen(str) -1);
puts(str);
strrev(str, end);
puts(str);
inprev(str);
puts(str);
return 0;
}
void strrev(char * start, char * end)
{
char temp;
while (end > start)
{
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
void inprev(char * start)
{
char * first = start;
char * spcpnt = start;
while (*spcpnt)
{
while (*spcpnt != ' ' && *spcpnt)
spcpnt++;
strrev(start, spcpnt-1); // removing the -1 sends the space on the
start = spcpnt++; // other side to be reversed, doesn't stop
// the problem.
}
}
Đây là kết quả:
Foobar bạn bè của tôi, foobar
raboof, sdneirf ym rabooF
foobarfriends, Foobar tôi
Vấn đề là việc thiếu một không gian cuối cùng ở cuối từ cuối cùng có nghĩa là mũ một không gian là mất tích giữa từ đó và preceeding một trong chuỗi cuối cùng, và thay vào đó được ném vào cuối của từ cuối cùng, đó là từ đầu tiên trong chuỗi ban đầu. Việc gửi không gian ở phía bên kia của từ chỉ di chuyển vấn đề ở nơi khác. Bất cứ ai có thể nhìn thấy một giải pháp?
Bạn phải làm gì khi gặp phải không gian X? Chúng có thuộc về từ trước hay sau? – RedX
+1 vấn đề tốt đẹp :). Nếu tôi có một chút thời gian, tôi sẽ cung cấp một giải pháp –
Tôi đoán bạn không muốn làm cho chữ cái đầu tiên trở thành bức thư lớn, như ví dụ của bạn ... – imacake