2015-10-31 6 views
0

Я пишу программу в c для удаления лишних пробелов, я выполнил всю работу, но когда я скомпилирую, строка, которую я хочу в выводе, не появляется, я думаю проблема заключается в основной функции, я покажу вам мой код:У меня проблема с печатью строки

#include <stdio.h> 
#include <stdlib.h> 


void eliminar_espacios(char oracion[100]) { 
int i; 
for(i=0;i!='\0';i++) { 
    if(oracion[i]==' ' && (oracion[i+1]==' ' || oracion[i+1]=='\0')) { 
     oracion[i]=oracion[i+1]; 
    } 
} 
} 

int contar_espacios(char oracion[100]) 
{ 
    int i,numero_espacios=0; 
    for (i=0;oracion[i]!='\0';i++){ 
     if (oracion[i]==' '&&oracion[i+1]==' '){ 
      numero_espacios+=1; 
     } 
    } 
    return(numero_espacios); 
} 


int main(void){ 
    char frase[100]; 
    int num_espacios; 
    printf("Escribe aqui a frase:"); 
    gets (frase); 
    num_espacios=contar_espacios(frase); 
    eliminar_espacios(frase); 
    printf("%s\n",frase); 
    printf("%d",num_espacios); 
    return 0; 
} 
+0

Что ожидается и что представляет собой нежелательный результат? – Marged

+0

Я ожидаю напечатать строку букв без лишних пробелов, а нежелательный результат - программа ничего не меняет –

+0

Я изменил код, но вместо того, чтобы печатать строку без лишних пробелов, он просто печатает строку без каких-либо изменений. –

ответ

2

Ваша функция eliminar_espacios не имеет «возврата». Кроме того, вы должны использовать STRCPY или strncopy, чтобы сохранить новую строку в 'frase2', , например:

strncpy(frase2, eliminar_espacios(frase), sizeof frase2) 
+0

Я добавляю возврат и тот же. Есть ли решение без использования strcpy или strncopy? –

+1

@AndresOtero Есть ли причина, по которой вы не хотите использовать 'strcpy' или' strncpy'? – fuz

+0

Мне не разрешено использовать эти функции –

0

Try:

strncpy(frase2, frase, 100); 
frase2[99] = '\0'; 
eliminar_espacios(frase2); 
num_espacios=contar_espacios(frase2); 

Edit: Если вы хотите, вы можете избавиться от frase2 полностью , просто вызовите все функции с Frase и не STRCPY необходимое:

eliminar_espacios(frase); 
num_espacios=contar_espacios(frase); 
printf("%s\n",frase); 

edit2: Исправьте eliminar_espacios() функция:

void eliminar_espacios(char oracion[100]) { 
    int i; 
    for(i=0;oracion[i]!='\0';i++) { 
     if(oracion[i]==' ' && (oracion[i+1]==' ' || oracion[i+1]=='\0')) { 
      oracion[i]=oracion[i+1]; 
     } 
    } 
} 
+0

Спасибо, теперь он что-то печатает !!! но он не выполняет функцию eliminar_espacios –

+0

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

Смежные вопросы