【发布时间】:2016-04-30 03:04:54
【问题描述】:
我想在我的程序中使用双组动态变量。我发现了类似的问题,Is it possible to use a for loop to change a variable name in C?
我可以用它做类似的例子
for (str[run] = 0 ; str[run] < 5 ; str[run]++)
来自另一个问题,但在我的示例中不起作用。
我有更高级的版本,因为我一次使用两组动态变量。我知道我们可以在 for 循环中放置尽可能多的变量,使用逗号,但即使有两个,它也会看起来很长而且不好看。所以我试着走不同的路。
我想要的是第一次使用 str1 和 chr1。
str2 和 chr2 第二次以此类推。
这是我的代码:
int main () {
int run; //loop counter
char str1[20] = "abracadabra"; //string #1
...
char chr1 = 'a'; //character #1
...
for (run; run <= 5; run++) // runs 5 times
{
printf("The string %c will be removed from %c characters. \n", str[run], chr[run]);
rmchr(str[run], chr[run]);
printf("New modified string is: %c \n\n", str[run]);
}
...
}
我知道我的代码是错误的,但我知道我非常接近事实 :-) 如果它有用,我也包括在内
#include <string.h>
在我的主要功能之前。
这是我的完整程序:
/*
* A simple program to remove certain characters from the given strings
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
int run; //loop counter
char str1[20] = "abracadabra"; //string #1
char str2[20] = "abracadabra"; //string #2
char str3[20] = "abracadabra"; //string #3
char str4[20] = "aaaa"; //string #4
char str5[20] = "aaaa"; //string #5
char chr1 = 'a'; //character #1
char chr2 = 'b'; //character #2
char chr3 = 'n'; //character #3
char chr4 = 'a'; //character #4
char chr5 = 'n'; //character #5
//remove certain characters from array
void rmchr(char str[], char ch); //rmchr stands for 'remove character'
for (run; run <= 5; run++) // runs 5 times
{
printf("The string %c will be removed from %c characters. \n", str[run], chr[run]);
rmchr(str[run], chr[run]);
printf("New modified string is: %c \n\n", str[run]);
}
return 0;
}
void rmchr(char str[], char chr)
{
int i, j = 0; //loop counters
int length; //length of array
length = strlen(str);
for (i = 0; i < length; i++) {
if (str[i] != chr) {
chr = str[i];
str[j] = chr;
j++;
}
}
str[j] = '\0';
}
一个程序的最终版本,它运行完美并得到了我的老师的认可:
/*
* A simple program to remove certain characters from the given strings
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
// print array before and after editing array
void print_rmchr (char str[], char ch);
int run; //loop counter
char str1[20] = "abracadabra"; //string #1
char str2[20] = "abracadabra"; //string #2
char str3[20] = "abracadabra"; //string #3
char str4[20] = "aaaa"; //string #4
char str5[20] = "aaaa"; //string #5
char chr1 = 'a'; //character #1
char chr2 = 'b'; //character #2
char chr3 = 'n'; //character #3
char chr4 = 'a'; //character #4
char chr5 = 'n'; //character #5
print_rmchr(str1, chr1);
print_rmchr(str2, chr2);
print_rmchr(str3, chr3);
print_rmchr(str4, chr4);
print_rmchr(str5, chr5);
return 0;
}
//remove certain characters from array
void rmchr(char str[], char ch) {
int i, j = 0; //loop variable
int size; //lengh
char new_str[20]; //new array
size = strlen(str);
for (i = 0; i < size; i++) {
if (str[i] != ch) {
new_str[j] = str[i];
j++;
}
}
new_str[j] = '\0';
strcpy(str, new_str);
}
// print array before and after editing array
void print_rmchr (char str[], char ch){
//remove certain characters from array
void rmchr(char str[], char ch);
printf("The string '%s' will be removed from '%c' characters. \n\n", str, ch);
rmchr(str, ch);
printf("New modified string is: '%s'. \n\n", str);
}
/* In case you will need user input:
//USER INPUT
printf("Enter the string : \n");
gets(str);
printf("Enter character which you want to delete : \n");
scanf("%ch", &ch);
print_rmchr(str, ch);
*/
【问题讨论】:
-
您确定
run已在您的...部分中初始化吗? -
"我想要的是第一次使用 str1 和 chr1。第二次使用 str2 和 chr2 等等。"我猜你不能这样做,因为典型的系统不会在可执行文件中保存变量名,除了用于调试的信息。为什么不使用数组?
-
MikeCAT,我必须使用字符串,这是我作业的一部分。在我的 ... 部分只是从 str1 到 str 5 以及从 chr1 到 chr5 等等。没什么特别的。
-
为什么不是指向字符串的指针数组?
-
使用字符串不会和使用数组冲突。或者“字符串”在你的课堂上有什么特殊含义吗?
标签: c