C语言中如何从多个字符串中选择特定的字符串



我有四个字符串。用户可以选择在它们之间交换字符串。但是当我开始创建函数时,我找不到一种方法来避免多个if语句来覆盖所有情况。所以,我谷歌它,看在论坛上,但我没有发现是否有可能在C语言中有四个变量,不知何故,每一个都链接到一个字符串,然后使用变量交换它们之间的字符串。还是有别的办法?

char string_one[]  = {"This is string 1"};
char string_two[]  = {"This is string 2"};
char string_three[]= {"This is string 3"};
char string_four []= {"This is string 4"};
void swap_strings(char *str1, char *str2){
//function to swap any 2 strings
char *temp;
temp=str1;
str1=str2;
str2=temp;
}
void swap_menu(){
int choice1, choice2;
printf("Which string do you want to swap: ");
scanf("%i", &choice1);
printf("Enter string o you want to swap with: ");
scanf("%i", &choice2);
if(choice1 == 1 && choice2 == 2)
swap_strings(string_one, string_two );
if(choice1 == 2 && choice2 == 3)
swap_strings(string_two, string_three );

if(choice1 == 3 && choice2 == 4)
swap_strings(string_three, string_four );

if(choice1 == 1 && choice2 == 3)
swap_strings(string_one, string_three );
}

如果你想索引字符串(就像你在这里做的),你可以使用字符串数组,而不是4个数组变量。

要交换两个字符串,需要修改实际的指针,而不是像在代码中那样复制它们。

这是你的代码的修改后的工作版本。它甚至包括一些基本的错误检查,并打印出前后的字符串。

#include <stdio.h>
const char *strings[] = {
"This is string 1",
"This is string 2",
"This is string 3",
"This is string 4",
};
void swap_strings(const char **str1, const char **str2){
const char *temp;
temp = *str1;
*str1 = *str2;
*str2 = temp;
}
void swap_menu(){
int choice1, choice2;
printf("Which string do you want to swap: ");
scanf("%i", &choice1);
printf("Enter string do you want to swap with: ");
scanf("%i", &choice2);
if (choice1 < 1 || choice2 < 1 || choice1 > 4 || choice2 > 4) {
printf("choices (%d, %d) are out of rangen", choice1, choice2);
return;
}
swap_strings(&strings[choice1-1], &strings[choice2-1]);
}
int main(int argc, char **argv) {
for (int i = 0; i < 4; i++) {
printf("%d: %sn", i+1, strings[i]);
}
swap_menu();
for (int i = 0; i < 4; i++) {
printf("%d: %sn", i+1, strings[i]);
}
}

我想你是想做这样的事情:

#include <stdio.h>
#include <stdlib.h>
char *string_one  = "This is string 1";
char *string_two  = "This is string 2";
char *string_three= "This is string 3";
char *string_four = "This is string 4";
void
swap_strings(char **str1, char **str2)
{
char *temp = *str1;;
*str1 = *str2;
*str2 = temp;
}
void
swap_menu(void)
{
char **d[] = { &string_one, &string_two, &string_three, &string_four };
int c[2];
printf("Which string do you want to swap: ");
if( scanf("%i", c) != 1 ){
fprintf(stderr, "Invalid inputn");
exit(EXIT_FAILURE);
}
if( c[0] < 1 || c[0] > 4 ){
fprintf(stderr, "Invalid entryn");
exit(EXIT_FAILURE);
}
printf("Enter string you want to swap with: ");
if( scanf("%i", c + 1) != 1 ){
fprintf(stderr, "Invalid inputn");
exit(EXIT_FAILURE);
}
if( c[1] < 1 || c[1] > 4 || c[0] == c[1] ){
fprintf(stderr, "Invalid entryn");
exit(EXIT_FAILURE);
}
swap_strings(d[c[0] - 1], d[c[1] - 1]);
}
int
main(void)
{
swap_menu();
printf("%sn", string_one);
printf("%sn", string_two);
printf("%sn", string_three);
printf("%sn", string_four);
return 0;
}

最新更新