遍历 char* 并将每个 char 与另一个 char 进行比较
Iterating through char* and comparing each char to another char
我不太精通 c,我遇到了问题
- 逐个字符遍历 char*
- 正确比较单个字符与另一个字符
给定一个像 "abcda" 这样的字符串,我想计算 "a" 的数量和 return 的数量
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != '[=10=]'; string_arg++){
printf(string_arg);
printf("\n");
/*given abcda, this prints
abcda a
bcda b
cda but i want c
da d
a a */
if(strcmp(string_arg, "a") == 0){ //syntax + logical error
counter++;
}
}
printf(counter);
}
else{
printf("error");
}
return(0);
}
我也不应该使用 strlen()
如何正确地一次比较一个字符?
arg
未声明。好像应该是argc
.
printf(string_arg);
是危险的,因为 string_arg
是用户输入,可以包含任意字符串,其中可能包括 %
.
strcmp()
如果用于比较字符串。您可以简单地使用 ==
来比较字符。
printf(counter);
也是错误的
}
末尾 main
函数丢失。
示例修复:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != '[=10=]'; string_arg++){
puts(string_arg);
/*given abcda, this prints
abcda a
bcda b
cda but i want c
da d
a a */
if(*string_arg == 'a'){
counter++;
}
}
printf("%d", counter);
}
else{
printf("error");
}
return(0);
}
if (strcmp(string_arg, "a") == 0) {
counter++;
}
对 strcmp
的调用不适合您的情况,因为它比较 strings。使用此语句,您可以比较从 string_arg
指向的元素开始的字符串与字符串 "a"
,而不是字符常量 'a'
。注意 "a"
等于 'a'
+ '[=19=]'
.
相反,您需要将 *string_arg
与 'a'
进行比较:
if (*string_array == 'a') {
counter++;
}
puts(string_arg);
打印一个字符串。那不是你想要的。您只想打印一个字符。使用 printf("%c", *string_arg);
代替打印字符。
请注意,printf(string_arg);
之类的内容很危险。始终使用格式说明符:printf("%c", *string_arg);
。原因解释如下 link:
这就是你想要的:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (int argc, char** argv) {
char* string_arg;
int counter = 0;
if (argc == 2){
for (string_arg = argv[1]; *string_arg != '[=12=]'; string_arg++) {
printf("%c", *string_arg);
printf("\n");
if (*string_arg == 'a') {
counter++;
}
}
printf("%d times character 'a' encountered.", counter);
}
else {
printf("Error: No second argument at the program invocation!");
}
return 0;
}
我不太精通 c,我遇到了问题
- 逐个字符遍历 char*
- 正确比较单个字符与另一个字符
给定一个像 "abcda" 这样的字符串,我想计算 "a" 的数量和 return 的数量
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != '[=10=]'; string_arg++){
printf(string_arg);
printf("\n");
/*given abcda, this prints
abcda a
bcda b
cda but i want c
da d
a a */
if(strcmp(string_arg, "a") == 0){ //syntax + logical error
counter++;
}
}
printf(counter);
}
else{
printf("error");
}
return(0);
}
我也不应该使用 strlen()
如何正确地一次比较一个字符?
arg
未声明。好像应该是argc
.printf(string_arg);
是危险的,因为string_arg
是用户输入,可以包含任意字符串,其中可能包括%
.strcmp()
如果用于比较字符串。您可以简单地使用==
来比较字符。printf(counter);
也是错误的}
末尾main
函数丢失。
示例修复:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != '[=10=]'; string_arg++){
puts(string_arg);
/*given abcda, this prints
abcda a
bcda b
cda but i want c
da d
a a */
if(*string_arg == 'a'){
counter++;
}
}
printf("%d", counter);
}
else{
printf("error");
}
return(0);
}
if (strcmp(string_arg, "a") == 0) {
counter++;
}
对 strcmp
的调用不适合您的情况,因为它比较 strings。使用此语句,您可以比较从 string_arg
指向的元素开始的字符串与字符串 "a"
,而不是字符常量 'a'
。注意 "a"
等于 'a'
+ '[=19=]'
.
相反,您需要将 *string_arg
与 'a'
进行比较:
if (*string_array == 'a') {
counter++;
}
puts(string_arg);
打印一个字符串。那不是你想要的。您只想打印一个字符。使用 printf("%c", *string_arg);
代替打印字符。
请注意,printf(string_arg);
之类的内容很危险。始终使用格式说明符:printf("%c", *string_arg);
。原因解释如下 link:
这就是你想要的:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (int argc, char** argv) {
char* string_arg;
int counter = 0;
if (argc == 2){
for (string_arg = argv[1]; *string_arg != '[=12=]'; string_arg++) {
printf("%c", *string_arg);
printf("\n");
if (*string_arg == 'a') {
counter++;
}
}
printf("%d times character 'a' encountered.", counter);
}
else {
printf("Error: No second argument at the program invocation!");
}
return 0;
}