В настоящее время я кодирую небольшую программу вращения. Но у меня проблемы со строками типа «это тест». Когда у меня есть такая строка, она кодирует только первые 4 символа, а не целую строку. Кажется, что пробелы что-то ломают. Я пытался игнорировать пробелы с выражением if, но это не работает, и я не знаю, почему. У вас есть идея по этой проблеме?Итерация над строкой с пробелами
И да ... код очень экспериментальный поэтому, пожалуйста, не бушевать о константных размерах массива и таких вещах ..
#include <stdio.h>
#include <stdlib.h>
#define alphabetsize 26
char alphabet[alphabetsize] = {'a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z'};
char lookup[alphabetsize] = {'0'};
char target[100] = {' '};
int search(char ch){
int i = 0;
for(; i < alphabetsize; i++){
if(alphabet[i] == ch) return i;
}
}
char* rotate(char string[], int rotn){
int i = 0;
for(; i < alphabetsize ; i++){
lookup[rotn] = alphabet[i];
rotn++;
if(rotn == (alphabetsize)) rotn = 0;
}
i = 0;
int index = 0;
for(; i < 100; i++){
printf("%d\n", i);
if(string[i] != ' '){
index = search(string[i]);
target[i] = lookup[index];
}
}
printf("%s\n", target);
return target;
}
int main(int argc, char *argv[]){
int rotn = strtol(argv[2], NULL, 10);
printf("String: %s\n", argv[1]);
printf("Used Rotation degree: %d\n", rotn);
char* string = rotate(argv[1], rotn);
printf("Decrypted/Encrypted String: %s\n", string);
return 0;
}
Пространства между аргументами программы в конечном итоге заставляют их быть отдельными аргументами ... т. Е. './progname this is test' помещает' this' в 'argv [1]', 'is' в' argv [2] ',' a' в 'argv [3]' и 'test' в' argv [4] '. Попробуйте прочитать строку с помощью 'fgets()' или что-то вроде этого в программе, а затем обработать ее. – JohnH
Нет, я начинаю программу с: ./rot «это тест» 13. «Это тест» - это один аргумент .. не 3 – Shibumi