2013-02-14 11 views
-1

Я пытаюсь перевернуть каждое слово в предложении в C так, что-то вроде:Включает отдельные слова в предложение в C?

«Я люблю большие собака» стало бы: «собаками большой, как я»

У меня есть следующий код до сих пор:

// the following effectively flips a sentence so "I like big dogs" would become 
    "sgod gib ekil I" 

for (i=0;i<length/2;i++){ // length is length of the string 
    temp=ret[length-(i+1)]; //ret is the string 
    ret[length-(i+1)]=ret[i]; 
    ret[i]=temp; 
} 
    //now this part should flip each individual word to the right way 
//pos and lengthPlacer are both initialized as 0 
while(pos<length){ 
    lengthPlacer++; 
    if (ret[lengthPlacer]==' ' || lengthPlacer==length){ 
for (i=pos;i<(lengthPlacer)/2;i++){ 
    temp=ret[lengthPlacer-(i+pos+1)]; 
    ret[lengthPlacer-(i+pos+1)]=ret[i]; 
    ret[i]=temp; 
} 
    pos=lengthPlacer+1; 
    } 
} 
return ret; //this returns "dogs gib ekil I" unfortunately (only flips 1st word) 

} 

Любая помощь очень ценится. Благодаря!

+0

вы можете разделить строку, хранящуюся в массиве, а затем вывести значение из верхнего индекса –

+1

Вы должны показать свой код здесь и задать конкретный вопрос о конкретной проблеме. Алгоритмически вы можете просто отменить каждое слово, а затем перевернуть всю строку. –

+0

Извините. Теперь я исправил свой код, чтобы показать свою проблему. – user2019594

ответ

0

Вы увеличиваете переменную pos в то же время, что и переменная lengthPlacer. Вам нужно, чтобы внутренний цикл увеличивался сначала до тех пор, пока после этого не исчезнет пространство, а затем цикл.

while(pos<length){ 
    while (lengthPlacer < length) 
    if (ret[lengthPlacer]==' ') break; 
    } 
    next = pos + (lengthPlacer-pos)/2; 
    while (pos < next){ 
    etc... 
    } 
    // Also here skip any spaces that might be dangling 
} 
Смежные вопросы