2015-04-29 2 views
0

Мне нужно закодировать функцию в C, которая получает строку символов, а затем добавляет каждому символу номер 13. Я придумал это решение:как добавить число к каждому символу строки

#include<stdio.h> 

main() 
{ 
    char text[100]; 
    gets(text); 
    code (text); 
    } 

code (char text[100]) 
{ 
    int i; 
    for(i=0;i<=98;i++) 
    { 
     text[i]=text[i] + 13 ; 
    } 
    printf ("%s",text); 
    return (0); 

} 

Это право?

+1

_Is это право? _ Вы проверить это? Если это сработает, я полагаю, что все в порядке. – JonasCz

+0

Этот вопрос более подходит для codereview.stackexchange.com – reggaeguitar

+1

@reggaeguitar Нет, это не так. Обзор кода предназначен для тех, кто работает, и который хочет быть чище. Не для «Это правильно?»/"Это работает?" –

ответ

1

Вы должны выглядеть некоторые детали:

// a void function should NOT return 

void code (char text[]){ 
// when passing a string as argument, you don't need to indicate its' size 

    int i = 0; // pay attention to give a value when initializing 

    while (text[i] != '\0') { // '\0' indicates string's end... 

     // while not the end 
     text[i] += 13; // same as text[i] = text[i] + 13; 
     i += 1;   // same as i = i + 1; 

    } 

    printf("%s", text); 
    // the string was encoded 
} 

Пример:

char text[100]; // its' size is 100, but.. 
gets(text);  // if you read "hello" from input/keyboard 

результат будет:

value ->  h e l l o \0 
       | | | | | | 
position ->  0 1 2 3 4 5 .... 

Ваш текст заканчивается в положении 5 ... потому что вам нужно искать «\ 0», чтобы найти wher e строка заканчивается.

Надеюсь, это поможет.

+1

Почему бы не 'for (int i = 0; text [i]; i ++) text [ i] + = 13; 'или даже' for (int i = 0; text [i]; text [i ++] + = 13); '? – i486

+0

@ i486 ... да, вы можете! Я не знал об этом ... но я пробовал здесь, и он работает: _http: //ideone.com/QWxaFz_, когда char содержит '\ 0', он возвращает false –

+0

Фактически, «false» равен нулю в C и '\ 0' также равно нулю. – i486

0

code Функция должна иметь тип возврата, если она не требует возврата ничего, установите ее тип на void.
Прежде чем использовать его, должен присутствовать прототип/определение функции.
Пользователь может не обязательно вводить строку фиксированной длины, поэтому используйте функцию strlen из файла заголовка string.h, чтобы рассчитать длину входной строки.
Стандартное определение main() должно быть int main(){ return 0;}

#include<stdio.h> 
#include<string.h> 
void code(char []); 
int main() 
{ 
    char text[100]; 
    gets(text); 
    code (text); 
    return 0; 
} 

void code (char text[100]) 
{ 
    int i; 
    int length=strlen(text); 
    for(i=0;i<=length;i++) 
    { 
     text[i]=text[i] + 13 ; 
    } 
    printf ("%s",text); 
    //return (0); 
} 
Смежные вопросы